首页 > 解决方案 > 为什么我的 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);

标签: javaswingarraylistjlistdefaultlistmodel

解决方案


我发现问题是因为我没有设置模型。如果模型是本地 DefaultListModel,则必须使用 setModel 方法在主类中设置它。

我需要引用 JList,然后像这样执行 setModel....

            list.setModel(getModelForCabin((Cabin)comboBox.getSelectedItem()));

其中list是JList的变量,getModelForCabin(Cabin Cabin)是返回DefaultListModel的方法。

它被添加到添加按钮的动作侦听器以及打开类时创建的刷新按钮中。


推荐阅读