Удаление элемента из JList с использованием ListModel в качестве типа модели - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть JList, который использует ListModel, а не DefaultListModel.Я не хочу менять тип сейчас, потому что я использую это во многих местах.Я хочу удалить выбранный элемент из того же списка.Как мне это сделать?Я использую следующий код, но он не работает для меня.

made_list.removeSelectionInterval(
    made_list.getSelectedIndex(), made_list.getSelectedIndex());

- EDIT -

Я использую следующий код при создании своего списка:

made_list = new javax.swing.JList();   
made_list.setModel(new DefaultListModel());

А затем в событии JButton mouseclick я использую следующий код для удаления выбранного элемента из списка при нажатии кнопки

private void removeActionPerformed(java.awt.event.ActionEvent evt) {                                       
    //made_list.removeSelectionInterval(made_list.getSelectedIndex(), 
    //made_list.getSelectedIndex());  
    System.out.println(made_list.getModel());  
    DefaultListModel model = (DefaultListModel)made_list.getModel();  
    model.remove(1);  
}

Ответы [ 3 ]

6 голосов
/ 25 апреля 2011

removeSelectionInterval ничего не удаляет из модели или списка, кроме интервала выбора. Элементы списка остаются невредимыми. Боюсь, что вам либо придется расширить свой ListModel и дать ему метод removeItem (...), а также прослушиватели и возможность запуска уведомителей и т. Д. А-ля AbstractListModel - довольно много работы! Однако, если бы это были мои деньги, я бы пошел простым путем и просто использовал бы DefaultListModel для своей модели, так как сделать это намного безопаснее, намного проще и займет гораздо меньше времени. Я знаю, что вы заявляете, что не хотите их использовать, но я думаю, что вы найдете это намного проще, чем ваши потенциальные альтернативы.

Пример SSCCE выглядит примерно так:

import java.awt.event.*;
import javax.swing.*;

public class Foo1 {
   private String[] elements = {"Monday", "Tueday", "Wednesday"};
   private javax.swing.JList made_list = new javax.swing.JList();

   public Foo1() {
      made_list.setModel(new DefaultListModel());
      for (String element : elements) {
         ((DefaultListModel) made_list.getModel()).addElement(element);
      }

      JButton removeItemBtn = new JButton("Remove Item");
      removeItemBtn.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            removeActionPerformed(e);
         }
      });

      JPanel panel = new JPanel();
      panel.add(new JScrollPane(made_list));
      panel.add(removeItemBtn);

      JOptionPane.showMessageDialog(null, panel);
   }

   private void removeActionPerformed(ActionEvent e) {
      System.out.println("made_list's model: " + made_list.getModel());
      System.out.println("Model from a fresh JList: " + new JList().getModel());
      DefaultListModel model = (DefaultListModel) made_list.getModel();
      if (model.size() > 0) {
         model.remove(0);
      }
   }

   public static void main(String[] args) {
      new Foo1();
   }

}
3 голосов
/ 25 апреля 2011

В прошлом вам давали ссылку на различные разделы учебника по Swing, чтобы помочь решить проблемы. Это было сделано по причине. Это помогает решить вашу текущую проблему. Это дает вам ссылку на будущие проблемы.

Все, что вам нужно сделать, это взглянуть на Оглавление учебника Swing, и вы найдете раздел «Как использовать списки», в котором есть рабочий пример, который добавляет / удаляет элементы из списка. Пожалуйста, сначала прочтите руководство.

Или, если вы не помните, как найти учебник по Swing, прочитайте JList API, где вы найдете ссылку на тот же учебник.

0 голосов
/ 07 февраля 2013
//First added  item into the list
DefaultListModel dlm1=new DefaultListModel();

listLeft.setModel(dlm1);

dlm1.addElement("A");
dlm1.addElement("B");
dlm1.addElement("C");

// Removeing element from list
Object[] temp=listRight.getSelectedValues();
if(temp.length>0)
{
for(int i=0;i<temp.length;i++)
{

  dlm1.removeElement(temp[i]);

}
}                   
...