如何在JTable中的特定行中设置颜色
How to set color in a specific row in JTable
我想为 table 中的特定行设置颜色。
我已经实现了方法 getBadRows() ,其中 returns 映射带有我想突出显示的键(行数)。看我的代码:
private static class WorkingTimeCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (value instanceof Date) {
value = new SimpleDateFormat("dd.MM.yyyy").format(value);
}
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
WorkingTimeTableModel model = (WorkingTimeTableModel) table.getModel();
for (Map.Entry<String, Integer> r : model.getBadRows().entrySet()) {
c.setForeground(row == Integer.parseInt(r.getKey()) ? Color.RED : Color.BLACK);
}
return c;
}
}
例如,当我在 Map 中有四个项目时,此方法仅突出显示 Map 中的最后一个项目。以前的项目没有突出显示,因为它看起来总是在调用 c.setForeground() 时刷新。
我想突出显示存储在我的地图中的行。 Map的key对应table.
中row的索引
我不知道该怎么做:(我试过很多方法。
不要在末尾使用 for 循环,而是简单地检查 getTableCellRendererComponent 参数中的行号是否与坏行之一匹配。如果是这样,请将颜色设置为红色,如果不是黑色。
也许是这样的,
Color color = model.getBadRows().contains(row) ? Color.RED : Color.BLACK;
c.setForeground(color);
我想为 table 中的特定行设置颜色。 我已经实现了方法 getBadRows() ,其中 returns 映射带有我想突出显示的键(行数)。看我的代码:
private static class WorkingTimeCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (value instanceof Date) {
value = new SimpleDateFormat("dd.MM.yyyy").format(value);
}
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
WorkingTimeTableModel model = (WorkingTimeTableModel) table.getModel();
for (Map.Entry<String, Integer> r : model.getBadRows().entrySet()) {
c.setForeground(row == Integer.parseInt(r.getKey()) ? Color.RED : Color.BLACK);
}
return c;
}
}
例如,当我在 Map 中有四个项目时,此方法仅突出显示 Map 中的最后一个项目。以前的项目没有突出显示,因为它看起来总是在调用 c.setForeground() 时刷新。
我想突出显示存储在我的地图中的行。 Map的key对应table.
中row的索引我不知道该怎么做:(我试过很多方法。
不要在末尾使用 for 循环,而是简单地检查 getTableCellRendererComponent 参数中的行号是否与坏行之一匹配。如果是这样,请将颜色设置为红色,如果不是黑色。
也许是这样的,
Color color = model.getBadRows().contains(row) ? Color.RED : Color.BLACK;
c.setForeground(color);