java JList 不会刷新,在调试器中工作
java JList wont refresh, works in debugger
JList Jlist;
JScrollPane scrollPane;
DefaultListModel<String> myModel = new DefaultListModel<>();
Jlist = new JList<String>();
scrollPane = new JScrollPane(Jlist);
我将 JList 和 myModel 发送到另一个 class,他们在那里执行以下操作。
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);
在另一个class.
myModel.addElement(aString);
遗憾的是问题仍然存在
问题是由于并发我没有正确保护共享资源。
您可以(在您的情况下很可能应该)在创建列表并使用模型对其进行初始化后添加元素:
jlist = new JList<String>(myModel);
scrollPane = new JScrollPane(jlist);
然后只需将模型传递给填充它的 class:
myModel.addElement(aString);
此外,如果您在非UI线程中更改模型,可能会出现这样的问题。要检查是否是这样,请尝试在 invokeLater
:
中调用 addElement
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
myModel.addElement(aString);
}
});
JList Jlist;
JScrollPane scrollPane;
DefaultListModel<String> myModel = new DefaultListModel<>();
Jlist = new JList<String>();
scrollPane = new JScrollPane(Jlist);
我将 JList 和 myModel 发送到另一个 class,他们在那里执行以下操作。
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);
在另一个class.
myModel.addElement(aString);
遗憾的是问题仍然存在
问题是由于并发我没有正确保护共享资源。
您可以(在您的情况下很可能应该)在创建列表并使用模型对其进行初始化后添加元素:
jlist = new JList<String>(myModel);
scrollPane = new JScrollPane(jlist);
然后只需将模型传递给填充它的 class:
myModel.addElement(aString);
此外,如果您在非UI线程中更改模型,可能会出现这样的问题。要检查是否是这样,请尝试在 invokeLater
:
addElement
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
myModel.addElement(aString);
}
});