我想根据第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行具有非空值,表的所有行都会变为彩色。 我哪里错了?
答案 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!