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

Dee*_*pak 2 java swing jlist

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

made_list.removeSelectionInterval(
    made_list.getSelectedIndex(), made_list.getSelectedIndex());
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

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

made_list = new javax.swing.JList();   
made_list.setModel(new DefaultListModel());
Run Code Online (Sandbox Code Playgroud)

然后在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);  
}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 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();
   }

}
Run Code Online (Sandbox Code Playgroud)