如何从数组列表中删除对象(包括组件)



我正在开发一个任务规划应用程序。我有一个"新任务"按钮来添加任务。单击后,此按钮将创建TaskRowToDo类的新实例,并将其添加到toDoList数组列表中。此类包含一行,该行包含一个文本字段和一些按钮。

这是"新任务"按钮代码:

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上设置Model。当我创建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中的对象的列表。

关于JL请提出一些建议。好的做法是声明JList的泛型类型(在您的情况下是JList<TaskRowToDo> toDoList= new JList<TaskRowToDo>

最新更新