//新手问题

我有一个带有基本单元格渲染器的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的运行频率降低了)。

09-25 21:28