[英]How to remove object (including components) from arraylist?
我正在開發任務計划應用程序。 我有一個“新任務”按鈕來添加任務。 單擊后,此按鈕將創建TaskRowToDo類的新實例,並將其添加到toDoList arraylist。 此類包含一行帶有文本字段和一些按鈕的行。
這是“新任務”按鈕代碼:
private void drawNewBtn(){
JButton btnNew = new JButton("Nieuwe taak");
btnNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("New task added");
toDoList.add(new TaskRowToDo(toDoIndex+7, false, "new task", 2));
toDoList.get(toDoIndex).draw();
toDoIndex++;
frmPlanner.revalidate();
}
});
frmPlanner.getContentPane().add(btnNew, "cell 3 12");
}
TaskRowToDo的末尾有一個“刪除”按鈕。 此按鈕應從toDoList中刪除該行,並將其從屏幕中刪除。
以下是“刪除”按鈕代碼:
btnRemoveToDo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("To Do removed");
toDoIndex--;
toDoList.remove(toDoIndex);
frmPlanner.revalidate();
}
});
該按鈕從toDoList中刪除TaskRowToDo實例,但它仍顯示在屏幕上,並且組件甚至可以工作。 因此它並沒有真正刪除。 我試過使用revalidate()和repaint(),但無濟於事。 作為測試,我嘗試了frmPlanner.removeAll(),即使這樣也無法清除屏幕(但是組件不再起作用)。
如何刪除這一行,包括其組件並清除屏幕上的該空間?
toDoList是JList嗎? 給出相同的更多代碼,這一次我建議在JList上使用setModel。 創建JList時,我總是准備方法setModel,它可以工作:
private void setModelForJList() {
toDoList.setModel(new ListModel<TaskRowToDo>() {
@Override
public int getSize() {
return toDoListEntityList.size();
}
@Override
public TaskRowToDogetElementAt(int index) {
return toDoListEntityList.get(index);
}
@Override
public void removeListDataListener(ListDataListener l) {
}
@Override
public void addListDataListener(ListDataListener l) {
}
});
toDoList.repaint();
}
當您從JList刪除對象時,調用此方法,toDoListEntityList是您放入Jlist中的對象列表。
關於JList的一些建議。 優良作法是聲明JList的通用類型(在您的情況下為JList<TaskRowToDo> toDoList= new JList<TaskRowToDo>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.