java - 为什么我的 DefaultListModel 没有出现在我的 JList 上?
问题描述
我有以下方法。
DefaultListModel getModelForCabin(Cabin cabin) {
List<Camper> listAdded= new ArrayList<Camper>(getOrCreateGroup(cabin));
DefaultListModel<Camper> dfm= new DefaultListModel<Camper>();
for(Camper c: listAdded){
if(!dfm.contains(c)){
dfm.addElement(c);
}
}
//System.out.println(listAdded);
//System.out.println(dfm);
return dfm;
}
然后,我像这样在 JList 中设置这个方法......
JList list = new JList(getModelForCabin((Cabin)comboBox.getSelectedItem()));
scrollPane_1.setViewportView(list);
在该方法中,如果我打印 dfm 和 listAdded ,如系统打印行所示,它会显示两者。
如果我输入这个...
System.out.println(getModelForCabin((Cabin)comboBox.getSelectedItem());
它也打印出模型。
但它不会做的是将模型添加到 JList。我尝试更改代码,删除 JList 并创建一个新的,然后重新排列代码。
不管我做什么,它都行不通。
所以我的列表打印得很好,我的 DefaultListModel 打印得很好,打印 Cabin 和 Campers 的 HashMap 工作得很好,但是 JList 不会打印模型。
添加:
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(361, 205, 296, 339);
getContentPane().add(scrollPane_1);
list = new JList(getModelForCabin((Cabin)comboBox.getSelectedItem()));
scrollPane_1.setViewportView(list);
解决方案
我发现问题是因为我没有设置模型。如果模型是本地 DefaultListModel,则必须使用 setModel 方法在主类中设置它。
我需要引用 JList,然后像这样执行 setModel....
list.setModel(getModelForCabin((Cabin)comboBox.getSelectedItem()));
其中list是JList的变量,getModelForCabin(Cabin Cabin)是返回DefaultListModel的方法。
它被添加到添加按钮的动作侦听器以及打开类时创建的刷新按钮中。
推荐阅读
- os.walk - os.walk 只提取了几个文件,没有文本信息
- google-nearby - 安卓和IOS之间谷歌附近消息无法使用
- python-3.x - 创建从年份“开始”到“结束”的表
- jquery - Quill - 将视频自动播放设置为 false
- java - Java - 使用 Scanner 读取文件以创建非重复对象
- node.js - 使用 docker-compose 容器化后,前端和后端之间没有通信
- python - 如何在 Python 中使用 for 循环创建嵌套字典?
- javascript - 单击按钮后,Bootstrap5 模态未在 React.js 中显示
- java - Java 进程占用的 RAM 比堆大小多得多
- java - 将图像文件写入 sdcard 时出现“Permission Denied”错误