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