//新手问题
我有一个带有基本单元格渲染器的JTable(它对行的颜色不同)。
我注意到我的单元格渲染器一直在为屏幕上显示的行运行,即使我对表格不做任何事情。
那是应该的样子吗?它不应该每个单元都渲染一次,就是这样吗?
我怎样才能使它停止运行,而仅在更改时重新计算?
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
log.debug("Building cell : " + row + "," + column);
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Filter filter = (Filter)table.getModel().getValueAt(row, Column.CLASSIFICATION.getIndex());
comp.setBackground(filter.getColor());
return comp;
}
最佳答案
我对包含大量数据的JTables进行了很多工作。超过99.9%的Java程序员通常会进行的操作。您需要了解一件事:默认情况下,会产生大量的废物,并且会进行大量通常不需要的操作。
如果您追求快速高效的JTables,那么有关于此主题的权威Sun文章:
“圣诞树应用程序,如何创建性能良好的频繁更新的JTable”
注意标题中的“Performance Well”,因为默认情况下,JTable perfs确实非常可悲地糟糕:
Original Link (Sun)
Current link (Oracle)
Archived Version:
在实现了本文建议的两种或三种技术之后,您将注意到JTable呈现中惊人的加速,并且您会发现生成的垃圾少得多(因此,GC的运行频率降低了)。