【发布时间】:2013-07-30 03:39:02
【问题描述】:
我正在编写一个能够处理频繁更新的 JTable。通常这个 JTable 有大约 1000 行数据,并且一些列会经常更新,因为它们的值是从股票价格得出的,股票价格在市场交易时间波动很大。
我面临的问题是,当大量行(例如 80%)正在更新时,JTable 变得非常慢 20-30 秒左右,分析器显示 EDT 线程非常繁忙,正在处理tableChanged 调用。
我尝试通过以下方式折叠更改 1) 抑制 fireTableCellUpdated 2) 如果有 50 行的更改,则为整个表调用 fireTableDataChanged。
比较好,但是频繁更新还是很慢,我的理解是fireTableDataChanged也很慢。所以如果数据更新足够频繁,fireTableDataChanged 会被频繁调用,GUI 会感觉迟钝。
有这方面经验的人可以推荐一个使用 fireTableRowsUpdate 的最佳实践吗? fireTableDataChanged 和 fireTableStructureChanged 来提高 GUI 的活力和性能?如果您有解决此问题的示例代码的指针,那就更好了。
非常感谢
安东尼斯
【问题讨论】:
-
@Anthony Si:除了我的回答,我想指出,频繁的事件并不是唯一的问题。可怕的、非常缓慢的默认 JTable/header/cells(重新)绘制性能是您遇到的问题的一个重要部分,这一切都在我在回答中给您的链接中进行了解释。
标签: java user-interface swing jtable