gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:15:39 25 4
gpt4 key购买 nike

我有使用ListModelJList,而不是DefaultListModel。我现在不想更改类型,因为我在很多地方都使用它。我想从同一列表中删除选定的项目。我该怎么做呢?我正在使用以下代码,但它对我不起作用。

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

--编辑--

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

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);
}

最佳答案

removeSelectionInterval 不会从模型或列表中删除任何内容(选择间隔除外)。列表项保持不变。恐怕你要么必须扩展你的 ListModel 并给它一个removeItem(...) 方法以及监听器和触发通知程序的能力等... a 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();
}

}

关于java - 使用 ListModel 作为模型类型从 JList 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com