Java着色表行

时间:2010-01-05 04:43:00

标签: java jtable

我想根据第3列中是否存在非null来为表行着色。 下面是我写的代码:(忽略大括号)

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {

        JComponent c =(JComponent) super.prepareRenderer(renderer, row, column);
        c.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1));
        if (column == 2 ){

                String value = (String) getValueAt(row, column);
                System.out.println(value);

                if (! value.equals(null)){

                    c.setForeground(Color.RED);
                }
            } 

问题是,当我执行此操作时,即使在第3列中只有1行具有非空值,表的所有行都会变为彩色。 我哪里错了?

3 个答案:

答案 0 :(得分:2)

JTable的默认渲染器是跨多个单元共享的整个表的单个实例。一旦你设置了前景,它将被设置为它的所有用法。当值不为null时,应将其设置回默认颜色。另外,为什么使用.equals(null)而不是== null?

答案 1 :(得分:2)

出于效率原因,super.prepareRenderer()返回的组件由表中的多个单元格使用。所以,你需要处理else途径。我会尝试以下方法:

if (column == 2 ){
  String value = (String) getValueAt(row, column);
  System.out.println(value);

  if (value == null){
    // I suppose this one may not be needed since the value is null 
    // and nothing should appear in the table.
    c.setForeground(Color.Black);
  } else {
    c.setForeground(Color.RED);
  }
} else {
  // This is definitely needed
  c.setForeground(Color.Black);
}

答案 2 :(得分:0)

我希望该值永远不会为null,因为

value.equals(空)

会抛出NullPointerException!