当我只希望JTable为特定单元格着色时,JTable会为其着色

时间:2018-11-28 11:11:59

标签: java swing jtable

npm install primeicons --save

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; } } 是填充JTable的数据数组。该表主要是字符串,但是有一些空字符串。我想为仅包含空字符串但不包含最后三行的单元格上色。

但是由于某种原因,它目前在我的整个桌子上都是乱涂的,为什么?

1 个答案:

答案 0 :(得分:2)

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

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

默认的表格单元格渲染器使用一个组件,该组件用于渲染每个单元格的内容。更改颜色后,它将保留该颜色,直到该颜色被明确更改为止。