java - 减少 getTableCellRendererComponent 的调用次数

标签 java swing jtable tablecellrenderer

我正在使用自定义单元格渲染器,它实现了 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/

相关文章:

java.lang.IllegalArgumentException : cannot add to layout: constraint must be a string 异常

java - BindingBeans 中的复合值未更新

java - ehcache 和日志记录问题

java - 这段代码是如何工作的以及输出是什么..这看起来很简单

java - 文件读取器相对路径

events - 扩展面板中的 Scala Swing react

java - 如何为 Java Swing 按钮制作 ActionListener

java.lang.IllegalStateException : Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

java - JTable 单元格中的 JPanel

java - 按 rowid 为特定行着色