我知道这不是关于填充JLists的唯一问题,但我没有在另一个SO线程中找到答案。
我使用Netbeans GUI构建器来创建我的GUI。 JList被添加到滚动窗格中,如果我硬编码JList的内容,一切都显示正常。
jList1.setModel(new javax.swing.AbstractListModel() {
public String[] strings = {"1", "2", "etc..."};
@Override
public int getSize() {
return strings.length;
}
@Override
public Object getElementAt(int i) {
return strings[i];
}
});
但如果我尝试通过SwingWorker
动态添加项目,则不会显示任何内容。
JList jList1 = new javax.swing.JList();
DefaultListModel info = new DefaultListModel();
....
jList1.setModel(info);
....
public void FillList(final String subject) {
worker = new SwingWorker() {
@Override
protected Object doInBackground() {
info.addElement(subject);
return 0;
}
@Override
protected void done() {
}
};
worker.execute();
}
我只想在JList中显示主题以用于视觉目的,其余部分在后台完成。
感谢任何帮助,
谢谢!
答案 0 :(得分:3)
Swing是单线程的,所有输出到可见GUI的输出都必须在EDT上完成
然后在Swing GUI中看不到ListModel中的任何更改
必须覆盖publish()
or process()
,这两种方法相当稳定,输出将在EDT上完成