Java 比较单元格中的2个值并更改JTable中的单元格颜色
因此,我想比较表中同一行上两个单元格(“初始目标”和“结果目标”)的2个值,如果值不相同,“结果目标”列上的单元格将变为红色 ,但我的代码将所有单元格变为红色,结果如下: 以下是我的期望: 这是我的密码:Java 比较单元格中的2个值并更改JTable中的单元格颜色,java,jtable,Java,Jtable,因此,我想比较表中同一行上两个单元格(“初始目标”和“结果目标”)的2个值,如果值不相同,“结果目标”列上的单元格将变为红色 ,但我的代码将所有单元格变为红色,结果如下: 以下是我的期望: 这是我的密码: tblResult = new JTable(tableModel) { @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
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;
}
};
如果您正在执行If(value1!=value2)
操作,您只是在检查value1
和value2
是否具有相同的引用,而在这里它们没有相同的引用,则此比较将始终返回true
您可以改为将这些对象强制转换为字符串或整数,如下所示:
String value1 = (String) getModel().getValueAt(row, 2);
String value2 = (String) getModel().getValueAt(row, 1);
然后按如下方式进行比较:
if (!value1.equalsIgnoreCase(value2)) {}
您为每个columnIndex执行逻辑,因此每个渲染组件都有自己的颜色,并被涂成红色。您应该有一些条件,比如
if(col==2)
,因此只有在为第三列调用方法prepareRenderer()
时才执行颜色魔术
当然,如果(!value1.equalsIgnoreCase(value2)){}应该执行前面提到的比较修复
顺便说一句,您可以使用
table.getColumnModel().getColumn(2).setCellRenderer(TableCellRenderer)
为该列设置特定的渲染逻辑。woow它可以工作,但行中的所有单元格仍为红色,我只希望第3列的单元格变为红色,结果如下:@Wallflower抱歉,我不确定您是如何设置颜色的,因为我在if
和else
条件下都看到color.white
。您可能需要再次检查此逻辑。我发现解决方案只需添加“if(!value1.equalsIgnoreCase(value2)&&col==2)”