5

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

注意事项:

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

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

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

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

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

4

1 回答 1

7

不要试图限制getTableCellRendererComponent呼叫次数。相反,通过缓存计算结果来更好地实现渲染器。

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

于 2012-08-28T05:58:56.293 回答