我需要设置行的背景颜色。例如,有这些行:
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中的所有行都有白色背景。我怎样才能达到目标?
答案 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;
}
});