当我只想为特定单元格着色时,JTable 正在为每个单元格着色

JTable is coloring every cell when I only want it to color specific cells

private class ColorRenderer extends DefaultTableCellRenderer
{           
    String[][] data;    

    public ColorRenderer(String[][] data)
    {
        this.data = new String[data.length][data[0].length];

        for(int i = 0; i < data.length; i++)
        {
            for(int g = 0; g < data[0].length; g++)
            {
                this.data[i][g] = data[i][g];       
            }
        }

    }       

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
    {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);            

        if(row < data.length - 3 && data[row][col].equals(""))
        {               
            c.setBackground(Color.LIGHT_GRAY);
        }

        return c;
    }       
}   

data是填充JTable的数据数组。 table 大部分都是字符串,但也有一些空字符串。我想在只有空字符串的单元格中着色,而不是最后三行。

虽然出于某种原因,它目前在我的整个 table 中乱涂乱画,为什么?

在您对 DefaultTableCellRenderer.getTableCellRendererComponent 的覆盖中,在 if 语句之后添加一个 else 部分:

if(row < data.length - 3 && data[row][col].equals(""))
    c.setBackground(Color.LIGHT_GRAY);
else 
    c.setBackground(table.getBackground());

默认的table单元格渲染器使用一个组件,用于渲染每个单元格的内容。一旦您更改了它的颜色,它将保持该颜色,直到该颜色被明确更改。