Eine Möglichkeit wäre, die aktuelle Farbe für jede Zeile innerhalb des Modells zu speichern. Hier ist ein einfaches Modell, das auf drei Säulen und drei Reihen befestigt ist:
static class MyTableModel extends DefaultTableModel {
List<Color> rowColours = Arrays.asList(
Color.RED,
Color.GREEN,
Color.CYAN
);
public void setRowColour(int row, Color c) {
rowColours.set(row, c);
fireTableRowsUpdated(row, row);
}
public Color getRowColour(int row) {
return rowColours.get(row);
}
@Override
public int getRowCount() {
return 3;
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int row, int column) {
return String.format("%d %d", row, column);
}
}
Beachten Sie, dass setRowColour
ruft fireTableRowsUpdated
; Dadurch wird nur diese Zeile der Tabelle aktualisiert.
Der Renderer kann das Modell aus der Tabelle erhalten:
static class MyTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
MyTableModel model = (MyTableModel) table.getModel();
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(model.getRowColour(row));
return c;
}
}
eine Zeile der Farbe ändern wäre so einfach wie:
model.setRowColour(1, Color.YELLOW);
Ich bin damit einverstanden. Es scheint mir, dass 'TableModel' Tabellendaten enthalten soll. Rendering sollte woanders durchgeführt werden. Der verlinkte Artikel ist aufschlussreich, danke! :) – Matthieu
Dies sollte als Antwort markiert werden. –