【问题标题】:Update JList with Custom Arraylist使用自定义 Arraylist 更新 JList
【发布时间】:2021-02-20 07:38:47
【问题描述】:

我试图将我的程序转换为 GUI。我有 2 个主题类型(b 和 m)的自定义 Arraylist,当按下 B 按钮时,我需要将自定义对象类型 setListData 设置为 b,按下 M 按钮时需要设置 m。到目前为止,我的列表看起来像

LabelCoreSubs.setText("Core Subjects:");
        ListCoreSub.setModel(new AbstractListModel<String>() {
            String[] strings = {};

            public int getSize() {
                return strings.length;
            }

            public String getElementAt(int i) {
                return strings[i];
            }
        });
        jScrollPane1.setViewportView(ListCoreSub);

我可以通过 ArrayList b = B.getCores(); 调用这个自定义数组列表。我如何让这个数组列表显示在我的 Jlist 中。我也尝试将 JList 类型更改为 Subject 但没有运气。

如何更新我的 JList 以在按钮单击事件上显示每个列表。

【问题讨论】:

    标签: java swing arraylist jlist


    【解决方案1】:

    JListsetListData() 方法仅适用于 Array 或 Vector,因此不能与 ArrayList 一起使用。

    所以你可以:

    1. 创建一个DefaultListModel
    2. 使用DefaultListModeladdAll(...)方法将ArrayList的项目复制到模型中。
    3. 使用JListsetModel(...) 方法。

    更好的方法是不创建两个 ArrayList 来保存初始数据。相反,只需创建一个DefaultListModel 并将数据直接添加到模型中。这样,数据只在一个地方。要更改JList 中显示的数据,您只需使用setModel(...) 方法即可。

    【讨论】:

    • 是否可以通过 b.toArray() 然后更新 Jlist?
    • 或者使用 DefaultListModel model = new DefaultListModel() for(JListValues val : array) model.addElement(val);
    • @xanthon23, 1) 第一种方法将创建一个固定模型。也就是说,一旦创建模型,您将无法动态更新模型。 2)为什么要重新发明轮子?已经有一种方法可以在一个语句中为您执行此操作。为什么要编写自己的循环?使用满足您要求的任何方法。
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多