我如何使一个GUI列表的对象数组



我有一个对象数组。这些对象很简单,只有两个string对象。我有一个toString()方法,它只返回其中一个字符串。

我需要把这个对象数组变成一个可见的GUI列表,以便用户可以从中选择一个。

在main中,我接受一个长字符串并将其发送给一个方法,该方法对其进行解析并返回我的对象数组。然后我创建一个新的JList,添加它,并使其可见:

JList list = new JList(objects);
list.setVisible(true);
add(list);

然而,什么也没有出现。此时,我已经在屏幕上显示了GUI。实际上,上面代码所包含的类扩展了JPanel。我不知道为什么我没有看到任何东西,所以我想我做错了什么。

编辑* *

好的,我的问题是我没有设置一个模型。然而,在设置模型后,我仍然没有得到任何结果。下面是我使用的代码:

            ScratchItem[] items = listPlaylists(line2);
            DefaultListModel newListModel = new DefaultListModel();
            for(ScratchItem item : items) {
                newListModel.addElement(item);
            }
            JList list = new JList();
            list.setModel(newListModel);
            list.setVisible(true);
            add(list, BorderLayout.SOUTH);
            invalidate();

与其更改JLists,不如保持相同的JList,但只需更改模型。如果您用新的字符串填充DefaultListModel,并在JList上调用setModel(...),那么您应该可以开始了。

DefaultListModel newListModel = new DefaultListModel();
for (String text : newStringArray) {
   newListModel.addElement(text);
}
originalJList.setModel(newListModel);

编辑

你的状态:

我这样做了,但我仍然没有得到任何东西。查看我更新的问题

:

好的,我的问题是我没有设置一个模型。然而,在设置模型后,我仍然没有得到任何结果。下面是我使用的代码:

        ScratchItem[] items = listPlaylists(line2);
        DefaultListModel newListModel = new DefaultListModel();
        for(ScratchItem item : items) {
            newListModel.addElement(item);
        }
        JList list = new JList();
        list.setModel(newListModel);
        list.setVisible(true);
        add(list, BorderLayout.SOUTH);
        invalidate();

您仍然在创建一个新的 JList。不要这样做,而是使用我们推荐的原始 JList。

ScratchItem[] items = listPlaylists(line2);
DefaultListModel newListModel = new DefaultListModel();
for(ScratchItem item : items) {
    newListModel.addElement(item);
}
// JList list = new JList(); // *** don't create a new JList
// originalList refers to the original displayed JList
originalList.setModel(newListModel);
// list.setVisible(true);
// add(list, BorderLayout.SOUTH);
// invalidate();

编辑2
你在注释中声明:

没有原始JList。这是我在程序中创建的第一个。我是否应该在构造函数中添加一个,然后在这里只更改模型和setVisible(true)?

事情变得更复杂了。如果其他一切都是正确的,则问题中的更新代码应该工作,这表明其他一切都不正确。根据您到目前为止发布的代码片段,很难说错在哪里。我的建议:

  • 首先,如果您需要在Swing GUI中交换视图,请考虑使用CardLayout,因为这使得交换更容易。
  • 其次,如果你被绑定到你当前的结构,那么你需要显示更多的代码,最好是通过张贴一个最小的代码示例来演示你的问题,一个SSCCE。这将允许我们运行你的代码并修改它,甚至可能纠正它。请在回复之前阅读链接,因为它提供了许多关于SSCCE要求的重要细节。

通常

revalidate();
repaint();

适合我。第一行再次布局容器,第二行重新绘制它(您也可以通过调整窗口大小来获得第二行的效果)。

但是,您可能应该更改底层模型,而不是每次都替换列表。

从"如何使用列表"中,"创建模型"一节将让您开始使用列表模型。

相关内容

  • 没有找到相关文章

最新更新