2015-12-15 3 views
0

Я работаю над приложением планирования задач. У меня есть кнопка «новая задача», чтобы добавить задачу. При щелчке эта кнопка создает новый экземпляр класса TaskRowToDo и добавляет его в arraalist 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();  
      } 
     }); 

Кнопка удаляет экземпляр TaskRowToDo из ToDoList, но он по-прежнему отображается на экране и компоненты даже работать. Так что это не совсем удалено. Я пробовал использовать revalidate() и repaint(), но безрезультатно. В качестве теста я попробовал frmPlanner.removeAll(), и даже это не очищает экран (однако компоненты больше не работают).

Как удалить эту одну строку, включая ее компоненты, и очистить это пространство на экране?

+0

Оформить свой код в github или где-нибудь, в противном случае он не кажется ясным для всех. –

+1

@ РоманГуйван Нет! Вопрос должен быть опубликован с помощью [MCVE ] (http://stackoverflow.com/help/mcve). – user1803551

+0

Дайте еще какой-нибудь код, потому что я не знаю, какой тип toDoList, TaskRowToDo, frmPlanner. – Victor1125

ответ

1

toDoList - это JList? дают такой же код, в это время я предлагаю setModel на JList. Я всегда готовить метод setModel когда я создаю JList, и она работает:

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>

+0

toDoList - это ArrayList. Я никогда не слышал о JList, это сопоставимо с ArrayList? – kajdehoop

+1

JList является компонентом библиотеки Swing. На ваш вопрос есть тег Swing – Victor1125

Смежные вопросы