当我只想为特定单元格着色时,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单元格渲染器使用一个组件,用于渲染每个单元格的内容。一旦您更改了它的颜色,它将保持该颜色,直到该颜色被明确更改。
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单元格渲染器使用一个组件,用于渲染每个单元格的内容。一旦您更改了它的颜色,它将保持该颜色,直到该颜色被明确更改。