我有以下方法。
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);
答案 0 :(得分:0)
我发现问题是因为我没有设置模型。如果模型是本地DefaultListModel,则必须使用setModel方法在主类中设置它。
我需要引用JList,然后像这样执行setModel ....
list.setModel(getModelForCabin((Cabin)comboBox.getSelectedItem()));
其中list是JList的变量,getModelForCabin(Cabin cabin)是返回DefaultListModel的方法。
它已添加到添加按钮的动作侦听器,以及打开类时创建的刷新按钮。