我正在开发一个任务规划应用。我有一个“新任务”按钮来添加任务。单击时,此按钮将创建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(),甚至这不清除屏幕(但组件将不再工作)。
如何删除这一行,包括其组件并在屏幕上清除此空间?
答案 0 :(得分:1)
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>