使用ListModel作为模型类型从JList中删除项目

时间:2011-04-25 03:57:46

标签: java swing jlist

我有JList使用ListModel而不是DefaultListModel。我现在不想改变类型,因为我在很多地方使用它。我想从同一列表中删除所选项目。我该怎么做呢?我使用以下代码,但它不适合我。

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

- 编辑 -

我在创建列表时使用以下代码:

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

然后在JButton鼠标点击事件中,当按下按钮时,我使用以下代码从列表中删除所选项目

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

答案 0 :(得分:6)

removeSelectionInterval从模型或列表中删除除选择间隔之外的任何内容。列表项保持不受影响。我担心你要么必须扩展你的ListModel并给它一个removeItem(...)方法以及监听器和激活通知器等的能力......一个la 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();
   }

}

答案 1 :(得分:3)

过去,您已获得指向Swing教程不同部分的链接,以帮助解决问题。这是有原因的。它有助于解决您当前的问题。它为您提供未来问题的参考。

您需要做的就是查看Swing教程的目录,您将找到有关“如何使用列表”的部分,其中有一个工作示例,用于添加/删除列表中的项目。请先阅读教程。

或者如果您不记得如何找到Swing教程,那么请阅读JList API,在那里您将找到指向同一教程的链接。

答案 2 :(得分:0)

//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]);

}
}