减少getTableCellRendererComponent调用的数量

时间:2012-08-28 05:52:40

标签: java swing jtable tablecellrenderer

我正在使用一个实现TableCellRenderer的自定义单元格渲染器,并为每一行显示JTextArea(而不是JLabel)。我基本上覆盖了我的getTableCellRendererComponent(...)方法,每行进行一些额外的计算。每个表更新只需执行一次这些计算。由于每次鼠标移动都会调用getTableCellRendererComponent方法,因此会发生滞后。所以我认为我应该阻止调用getTableCellRendererComponent来避免滞后。

考虑:

1)我的表只有1列,没有标题。

2)我的数据是静态的,并且是通过实现AbstractTableModel的自定义tablemodel类中的getValueAt(int row,int column)方法从ArrayList读取的。

3)我不需要监视鼠标运动事件。

4)我不期望有太多数据,所以我可能想要一次显示整个表或完全缓存它。

5)大多数滞后是每次从getTableCellRendererComponent返回时设置文本引起的,因为有些行使用从右到左的字符,而RTL文本需要额外的时间来渲染。

1 个答案:

答案 0 :(得分:7)

请勿尝试限制getTableCellRendererComponent来电的数量。相反,通过缓存计算结果,可以更好地实现渲染器。

您可以轻松地向tablemodel添加侦听器,以便渲染器知道模型何时更新。只有这样才能标记存储的计算结果无效,并在下一次getTableCellRendererComponent调用时重新计算它们。