Ändern Sie die Farbe einiger Zeilen, aber nicht aller Zeilen in einer JTable
-
12-12-2019 - |
Frage
Um dies zu erreichen, habe ich eine benutzerdefinierte Zellrenderer-Klasse erstellt.
public class MatchTableCellRenderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent (JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell;
cell = super.getTableCellRendererComponent(
table, obj, isSelected, hasFocus, row, column);
if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);
cell.setForeground(Color.green);
}
return cell;
}
}
Und ich habe diesen Renderer so eingestellt, dass er von den Spalten meiner Tabelle verwendet wird:
tempColumn = table.getColumnModel().getColumn(0);
tempColumn.setCellEditor(new MacColumnEditor());
tempColumn.setCellRenderer(new MatchTableCellRenderer());
tempColumn = table.getColumnModel().getColumn(1);
tempColumn.setCellEditor(new IpColumnEditor());
tempColumn.setCellRenderer(new MatchTableCellRenderer());
tempColumn = table.getColumnModel().getColumn(2);
DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
dfEditor.setClickCountToStart(2);
tempColumn.setCellEditor(dfEditor);
tempColumn.setCellRenderer(new MatchTableCellRenderer());
Ich möchte die Zeilen, die einen String[] der Länge=7 enthalten, grün und die anderen mit der Standardfarbe.Aber es ist interessant, dass alle meine Reihen grün werden.Wie Sie sehen, habe ich eine Drucklinie.Es wird 4 Mal gedruckt (meine Tabelle hat 12 Zeilen), aber alle Zeilen werden grün dargestellt, statt 4.Was mache ich falsch?
Lösung
Der Grund ist der berüchtigte Farbspeicher (TM) des DefaultableCelEditors: Sie müssen die Farben immer einstellen, anstatt nur in einem Zweig. generasacodicetagpre.
Die genauen Details werden in einem THECY Thread