浏览 2175 次
锁定老帖子 主题:貌似是jlist的bug
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-12
public class TestJList extends JFrame { private static final long serialVersionUID = 1L; JButton fresh = new JButton("fresh"); JScrollPane jsp = new JScrollPane(); JPanel panel = new JPanel();; DefaultListModel model = new DefaultListModel(); Runnable runnable = null; Thread t = null; JList list = new JList(model); private TestJList() { init(); } void init() { this.setTitle("JList test"); this.setSize(300, 200); loadData(); panel.setLayout(new BorderLayout()); fresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadData(); } }); panel.add(fresh, BorderLayout.NORTH); jsp.getViewport().setView(list); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { System.out.println("the item you have selected is :" + e.getLastIndex()); } }); panel.add(jsp, BorderLayout.CENTER); this.getContentPane().add(panel); this.setVisible(true); this.pack(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void loadData() { fresh.setEnabled(false); if (model.size() != 0) { model.clear(); } runnable = new Runnable() { public void run() { for (int i = 0; i < 1000; i++) { model.addElement("hello world:" + i); } list.setSelectionInterval(0, 0); SwingUtilities.invokeLater(new Runnable() { public void run() { fresh.setEnabled(true); } }); } }; SwingUtilities.invokeLater(runnable); } public static void main(String[] args) { new TestJList(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-13
出现这种情况的原因初步测试是因为若被选中的第一条即"hello world:0",点fresh时,每一次model.addElement都会触发一次ListSelectionEvent,但是若选中的不是第一条,就只在最后触发一次...所以效率上差别很大
具体为什么出现了这种情况,继续分析中... |
|
返回顶楼 | |
发表时间:2009-05-13
恩 估计就是在这块出的问题,执行clear后,有的selectlistener没有被清除
|
|
返回顶楼 | |