【发布时间】:2012-11-21 13:27:52
【问题描述】:
这是一个示例,您按下一个按钮,jList1 将重新填充从 a1 到 a1000 的项目。:
//variable
private List<String> list = new ArrayList<>();
...
//main method
jList1.setModel(new DefaultListModel());
for(int i = 0; i < 1000; i++) {
list.add("a"+i);
}
...
//button action - jList1 refill
DefaultListModel dtm = (DefaultListModel)jList1.getModel();
dtm.removeAllElements();
for(String s : list) {
dtm.addElement(s);
}
如果我填写jList1,然后选择(用鼠标)0 索引(jList 中的第一个元素),然后在重新填写列表时按下程序冻结的按钮。如果我选择任何其他元素或根本不选择列表中的任何项目,那么它就可以填满。
附:这个例子是在没有任何 swing 或 EWT 线程的情况下完成的,因为使用它们找到了主要原因。
SSCCE:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lt;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
/**
*
* @author Minutis
*/
public class Window {
public static void main(String[] args) {
final List<String> list = new ArrayList<>();
JFrame frame = new JFrame("BorderLayout Frame");
JPanel panel = new JPanel();
final JList jList1 = new JList();
JButton refill = new JButton("Refill");
jList1.setModel(new DefaultListModel());
for(int i = 0; i < 1000; i++) {
list.add("a"+i);
}
refill.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultListModel dtm = (DefaultListModel)jList1.getModel();
dtm.removeAllElements();
for(String s : list) {
dtm.addElement(s);
}
}
});
frame.add(panel);
panel.setLayout(new BorderLayout());
panel.add(jList1, BorderLayout.CENTER);
panel.add(refill, BorderLayout.SOUTH);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
【问题讨论】:
-
你有异常吗?
-
不,没有例外,这就是我写在这里的原因。
-
你能发一个SSCCE吗?
-
在类似代码中为我工作,没人知道你的休息如何,可能很重要然后发布一个 SSCCE 生成的上午问题,否则必须等待奇迹
-
@Minutis 是的,我知道:这是为了说明 removeAllElements 在选择索引时似乎会做一些不同的事情......无论如何,这是一个很好的解决方法来做 jList1.setSelectedIndex(1);在您清空列表之前:我查看了 java 源代码并检查了索引是否会导致您的代码永远不会崩溃……这不是一个可接受的答案,而是一种解决方法……如果有任何事情要做的话,这是一个非常有趣的“错误”要解决这个问题,它将在 JList 中而不是在模型中......
标签: java swing user-interface jlist