Java JList不会刷新,可在调试器中使用

时间:2019-02-22 19:10:56

标签: java jlist

JList Jlist;
JScrollPane scrollPane;
DefaultListModel<String> myModel = new DefaultListModel<>();

Jlist = new JList<String>();
scrollPane = new JScrollPane(Jlist);

我将JList和myModel发送到另一个类,他们在其中执行以下操作。

myModel.addElement(aString);
Jlist.setModel(myModel );

这将更新调试器中的JList。但是,当我运行它时,我在GUI中看不到JList的更改,但是变量在调试器中。

编辑#1     根据答案建议进行了更改:

DefaultListModel<String> myModel = new DefaultListModel<>();
JList Jlist = new JList<String>(myModel );
JScrollPane scrollPane = new JScrollPane(Jlist);

在另一堂课中。

myModel.addElement(aString);

问题仍然存在

问题是由于并发引起的,我没有适当地保护共享资源。

1 个答案:

答案 0 :(得分:0)

在创建列表并使用模型对其进行初始化之后,您可以添加(并且很可能应该添加)元素:

jlist = new JList<String>(myModel);
scrollPane = new JScrollPane(jlist);

然后将模型传递给填充它的类:

myModel.addElement(aString);

此外,如果您要在非UI线程中更改模型,则可能会出现这样的问题。要检查是不是这样,请尝试在addElement内调用invokeLater

javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        myModel.addElement(aString);
    }
});