如何从arraylist中删除对象(包括组件)?

时间:2015-12-15 20:54:24

标签: java swing

我正在开发一个任务规划应用。我有一个“新任务”按钮来添加任务。单击时,此按钮将创建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(),甚至这不清除屏幕(但组件将不再工作)。

如何删除这一行,包括其组件并在屏幕上清除此空间?

1 个答案:

答案 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>