设置具有相同日期的行的背景颜色

时间:2016-03-22 09:15:29

标签: java swing background-color

我需要设置行的背景颜色。例如,有这些行:

29.12.14  Absences
12.01.15  Absences
12.01.15  Accounts

现在,如果有2行具有相同的日期(12.01.15以上),则它们应该在GUI中具有相同的背景颜色。

    String week = new String();
    int weekCounter = 0;
    int colour = 0;

    // Append the rows
    for (ExcelRow row : printOutRows) {
        if (weekCounter == 0){
        week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString();
            colour = 0;
        }
        else if (row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString().equals(week)){
            colour = 0;
        }
        else {
            week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString();
            colour = 1;
        }

        model.addRow(new Object[] {
                row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(),
                row.getExcelCells().get(1).getExcelCell().getRichStringCellValue().getString(),
                row.getExcelCells().get(2).getExcelCell().getRichStringCellValue().getString(),
                row.getExcelCells().get(3).getExcelCell().getNumericCellValue()});  

        if (colour == 0){
            table.setSelectionBackground(Color.RED);
        }
        else{ 
            table.setSelectionBackground(Color.LIGHT_GRAY);
        }
        weekCounter ++;

    }

我尝试了上面的代码,但JTable中的所有行都有白色背景。我怎样才能达到目标?

1 个答案:

答案 0 :(得分:1)

在第一列中添加颜色变量时可以执行此操作。在我的例子中,我使用了一个布尔值,但如果您使用其他任何东西,它也会起作用。

在第一部分中,我像以前一样准备你的代码,但首先是颜色 之后,我从视图中删除了第一列,因此您没有看到它。但它仍然存在。
最后,我将输出视为我们之前设置的变量。

String week = "";
boolean colorSwitch = false;

for (ExcelRow row : printOutRows) {
    if (!row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString().equals(week)){
        week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString();
        colorSwitch = !colorSwitch;
    }

    model.addRow(new Object[] {
        colorSwitch,
        row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(),
        row.getExcelCells().get(1).getExcelCell().getRichStringCellValue().getString(),
        row.getExcelCells().get(2).getExcelCell().getRichStringCellValue().getString(),
        row.getExcelCells().get(3).getExcelCell().getNumericCellValue()
   });  

}

// remove first column from the view (the one with the boolean value in it)      
TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn( tcm.getColumn(0) );

// render the table according to the color.      
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);

        if ((Boolean) table.getModel().getValueAt(row, 0)) {
            setBackground(Color.BLACK);
            setForeground(Color.WHITE);
        } else {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
        }       

        return this;
    }   
  });