我正在使用自定义单元格渲染器,它实现了 TableCellRenderer 并为每一行显示 JTextArea(而不是 JLabel)。我基本上用我的方法覆盖了 getTableCellRendererComponent(...) 方法,它每行做一些额外的计算。这些计算必须在每次表更新时进行一次。由于每次鼠标移动都会调用 getTableCellRendererComponent 方法,因此会出现延迟。所以我认为我应该阻止调用 getTableCellRendererComponent 以避免延迟。
注意事项:
1) 我的表格只有 1 列并且没有标题。
2) 我的数据是静态的,通过实现 AbstractTableModel 的自定义表模型类中的 getValueAt(int row, int column) 方法从 ArrayList 中读取。
3) 我不需要监视鼠标移动事件。
4) 我不希望有太多数据,所以我可能想一次显示整个表或完全缓存它。
5) 大多数延迟是由每次从 getTableCellRendererComponent 返回时设置文本引起的,因为有些行使用从右到左的字符,并且 RTL 文本需要额外的时间来呈现。
最佳答案
不要试图限制 getTableCellRendererComponent
调用的次数。相反,通过缓存计算结果来更好地实现渲染器。
您可以轻松地向表模型添加一个监听器,以便您的渲染器知道模型何时更新。只有这样它才应该标记存储的计算结果无效,并在下一次调用 getTableCellRendererComponent
时重新计算它们。
关于java - 减少 getTableCellRendererComponent 的调用次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153452/