我有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)
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)