Java 比较单元格中的2个值并更改JTable中的单元格颜色

Java 比较单元格中的2个值并更改JTable中的单元格颜色,java,jtable,Java,Jtable,因此,我想比较表中同一行上两个单元格(“初始目标”和“结果目标”)的2个值,如果值不相同,“结果目标”列上的单元格将变为红色 ,但我的代码将所有单元格变为红色,结果如下: 以下是我的期望: 这是我的密码: tblResult = new JTable(tableModel) { @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {

因此,我想比较表中同一行上两个单元格(“初始目标”和“结果目标”)的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;
        }
    };
如果您正在执行
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)”