Swing - Einstellen der Farbe einer Zelle basierend auf dem Wert einer Zelle
Ich möchte die Farbe einer Zelle basierend auf dem Wert der Zelle festlegen. Nachdem ich ein bisschen gegoogelt habe, habe ich herausgefunden, dass ich es mit so etwas machen kann:
public class TableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int col)
{
// get the DefaultCellRenderer to give you the basic component
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
// apply your rules
if (value.toString().equals("Red"))
c.setBackground(Color.RED);
else
c.setBackground(Color.GRAY);
return c;
}
}
Das Problem, das ich habe, ist, dass der Code, den ich ändern möchte, bereits das TableCellRendererer für die Spalten des JTable einstellt. Der Code enthält eine Funktion, die folgendermaßen aussieht:
private void configureTableColumns() {
Enumeration columns = this.table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tableColumn = (TableColumn) columns.nextElement();
this.setCellRenderer(tableColumn);
TableCellRenderer renderer = tableColumn.getCellRenderer();
if (renderer == null) {
renderer = this.table.getDefaultRenderer(Object.class);
}
tableColumn.setCellRenderer(renderer);
this.setCellEditor(tableColumn);
}
}
Muss ich mit dem obigen Code noch die TableCellRenderer-Klasse hinzufügen, die zuvor angezeigt wurde? Alles, was ich tun möchte, ist zu überprüfen, ob der Wert der Zelle 'ABC' ist und den Hintergrund auf ROT zu setzen.
Aktualisieren:Ich habe versucht, meine Version des TableCellRenderer als innere Klasse in den Code einzufügen, den ich ändern möchte, aber ich erhalte die Fehlermeldung, dass bei tableColumn.getCellRenderer () ein Typkonflikt vorliegt.
Type mismatch: cannot convert from TableCellRenderer to MyTableExample.TableCellRenderer
Vielen Dank