我知道这不是关于填充 JList 的唯一问题,但我没有在另一个 SO 线程中找到答案。
我使用 Netbeans GUI 构建器来创建我的 GUI。 JList 被添加到滚动 Pane 中,如果我对 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 中显示主题,其余的在后台完成。
感谢任何帮助,
谢谢!
最佳答案
Swing 是单线程的,所有到可见 GUI 的输出都必须在 EDT 上完成
您对 Concurency in Swing 有疑问
来自 SwingWorkers methods doInBackground() 的输出没有 notified
EventDispatchThread
然后 ListModel 中的任何更改在 Swing GUI 中不可见
必须覆盖
publish()
orprocess()
, 这两种方法完全保证输出将在 EDT 上完成
关于java - 无法将元素添加到 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12744532/