gpt4 book ai didi

java - 从事件动态更新 JList

转载 作者:行者123 更新时间:2023-12-01 16:52:46 24 4
gpt4 key购买 nike

我有一个 JList,它从对象的 ArrayList 中获取元素,并在列表 Pane 中显示该对象中的一些元素。当我选择该元素时,它会显示其他字段和标签中的完整信息。作为程序实现的一部分,我还可以向 ArrayList 添加和删除对象。我想做的是,每次更改 ArrayList 时,JList 都会更新以反射(reflect) ArrayList 的新状态。下面是我的 JList 元素的代码。

    DefaultListModel<String> defListModel = new DefaultListModel<String>();
if(studentList.size() > 0){
for(int i = 0; i < studentList.size(); i++){
Student aStudent = studentList.get(i);
defListModel.addElement(aStudent.toString());
}
}
JList<String> list = new JList<String>(defListModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scroll = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
ListSelectionModel listSelectionModel = list.getSelectionModel();
listSelectionModel.addListSelectionListener(new SelectionListener());
scroll.setBounds(16, 24, 130, 205);
mainPanel.add(scroll);

随着项目的添加和删除,我将如何动态更新此列表?请不要提供完整的解决方案(因为我发现这样做可以学得更好),但如果我能找到解决方案,任何有用的提示或建议将不胜感激。

最佳答案

您的 DefaultListModel 拥有您需要的所有方法:

void    DefaultListModel#addElement(E element);
void DefaultListModel#add(int index, E element);
E DefaultListModel#remove(int index);
boolean DefaultListModel#removeElement(Object obj)

当您从列表中添加/删除项目时,您可以对 JList 的模型进行相同的修改。

<小时/>

如果您只是更新您的DefaultListModel ,您可以恢复您的ArrayList与:

studentList = Collections.list(defListModel.elements());  // creates new ArrayList

或者,如果必须维护对 StudentList 的其他引用:

studentList.clear();
studentList.addAll(Collections.list(defListModel.elements()));

编辑哎呀!对不起。您的ArrayList<?> studentList属于未知未指定的类型;我们无法恢复原始列表。甚至是ArrayList<String>的学生姓名无法可靠地与个别学生匹配,因为 #toString()可能会返回不同的 String每次调用时,取决于它的实现方式,并且学生姓名可能不是唯一的。您只需对两个列表执行相同的操作即可。

<小时/>

编辑 JList 的默认渲染器会打电话#toString()在列表中的对象上。而不是调用 defListModel.addElement(aStudent.toString()) ,您可以将实际对象添加到适当键入的 JList 中/DefaultListModel .

DefaultListModel<Student> defListModel = new DefaultListModel<>();
// ...
defListModel.addElement(aStudent);
// ...
JList<Student> list = new JList<>(defListModel);

通过此更改,可以修改 defListModel,并且可以通过以下方式恢复对学生列表的相应更改:

studentList = Collections.list(defListModel.elements());

关于java - 从事件动态更新 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634088/

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