Java 当我只想让JTable给特定的单元格着色时,它会给每个单元格着色 私有类ColorRenderer扩展了DefaultTableCellRenderer { 字符串[][]数据; 公共颜色渲染器(字符串[][]数据) { this.data=新字符串[data.length][data[0].length]; 对于(int i=0;i
Java 当我只想让JTable给特定的单元格着色时,它会给每个单元格着色 私有类ColorRenderer扩展了DefaultTableCellRenderer { 字符串[][]数据; 公共颜色渲染器(字符串[][]数据) { this.data=新字符串[data.length][data[0].length]; 对于(int i=0;i,java,swing,jtable,Java,Swing,Jtable,data是填充JTable的数据数组。表中大部分都是字符串,但有一些空字符串。我想在只有空字符串的单元格中着色,但不在最后三行中着色 但出于某种原因,它目前在我的整个表中不分青红皂白地着色,为什么?在您对DefaultTableCellRenderer.GetTableCellRenderComponent的覆盖中,在if语句后添加一个else部分: private class ColorRenderer extends DefaultTableCellRenderer {
data
是填充JTable的数据数组。表中大部分都是字符串,但有一些空字符串。我想在只有空字符串的单元格中着色,但不在最后三行中着色
但出于某种原因,它目前在我的整个表中不分青红皂白地着色,为什么?在您对
DefaultTableCellRenderer.GetTableCellRenderComponent的覆盖中,在if语句后添加一个else部分:
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;
}
}
if(行
默认的表格单元格渲染器使用一个组件,用于渲染每个单元格的内容。一旦你改变了它的颜色,它将保持该颜色,直到该颜色被明确改变。这个答案是不符合逻辑的,不应该是正确的reason@hunter哦:)这是非常符合逻辑的答案,提问者很快就会发现。@hunter阅读了文档中的实施说明
,hunter看着源代码,我看到了setForeground
和setBackground
方法setunselectedForeground
和unselectedBackground
成员,它们用于初始化GetTableCellRenderComponent中JLabel的颜色(如果选择为false,则为false)谢谢你,我很感激你的回答,希望能对OP有所帮助,这是这个社区的最终目标。至少OP会深入挖掘java源代码。
if(row < data.length - 3 && data[row][col].equals(""))
c.setBackground(Color.LIGHT_GRAY);
else
c.setBackground(table.getBackground());