所以我想比较来自同一行的2个单元格中的2个值("初始目标"和"结果目标"),如果值不相同单元格"结果目标"列将变为红色 ,但我的代码将所有单元格变为红色,结果如下:
这就是我的期望:
这是我的代码:
tblResult = new JTable(tableModel) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component comp = super.prepareRenderer(renderer, row, col);
Object value1 = getModel().getValueAt(row, 2);
Object value2 = getModel().getValueAt(row, 1);
if (value1!=value2) {
comp.setBackground(Color.red);
}
else {
comp.setBackground(Color.white);
}
return comp;
}
};
答案 0 :(得分:3)
如果您正在执行if (value1 != value2)
,那么您只是在检查value1
和value2
是否具有相同的引用,而在这里它们不是这样,此比较将始终返回true
您可以做的是将这些对象转换为String或Integer,如下所示:
String value1 = (String) getModel().getValueAt(row, 2);
String value2 = (String) getModel().getValueAt(row, 1);
然后按如下方式进行比较:
if (!value1.equalsIgnoreCase(value2)) {}
答案 1 :(得分:1)
您为每个columnIndex执行逻辑,因此每个渲染组件都会对其颜色进行操作并绘制,例如红色。您应该有类似if(col == 2)
的条件,因此只有在为第3列调用方法prepareRenderer()
时才执行您的颜色魔法。
原因是已经提到的比较修正if (!value1.equalsIgnoreCase(value2)) {}
应该完成。
顺便说一下,您可以使用table.getColumnModel().getColumn(2).setCellRenderer(TableCellRenderer)
为此列设置特定的呈现逻辑。