JList在多线程环境下重新绘制方法



我有一个程序,它每秒都会检查数据库中是否有新插入的行,如果发现新记录,我必须清除我的listModel,然后再次从数据库中检索所有数据,并将其重新显示在列表中。

    itemListModel.clear();
    ArrayList resultArrayList = DBQueries.getAllSubmittedSaleTransaction();
    Iterator iterate = resultArrayList.iterator();
    int i = 0;
    while (iterate.hasNext()) {
        Hashtable data = (Hashtable) iterate.next();            
        itemListModel.add(i, data);
        this.itemList.addNotify();
        this.itemList.validate();
        this.itemList.repaint();
        i++;
    }
    this.validate();
    this.repaint();

但是,问题是,重新绘制方法有时有效,有时无效。有什么聪明的方法可以做到这一点吗?

提前感谢

如果您正在更新模型,则不需要重新绘制JList,尤其是如果您的模型在添加新数据后调用fireContentsChanged(...)。请确保只在Swing事件线程上更改模型。

考虑一下你的

  • 在SwingWorker中执行数据库查询
  • 向SwingWorker添加PropertyChangeListener
  • 当SwingWorker的state属性更改为SwingWorker.StateValue.DONE时,让GUI从SwingWorkers获取新数据,并在EDT上填充ListModel
  • 然后让ListModel激发其fireContentChanged(...)方法
  • ListModel应该扩展AbstractListModel
  • 请注意,如果您能够使用DefaultListModel,您甚至不必调用fireContent....()方法,因为DefaultListModel将为您执行此操作

相关内容

  • 没有找到相关文章

最新更新