Ich habe Schwierigkeiten, den CellRenderer zu verstehen und eine Lösung für ein bestimmtes Problem zu finden. Ich möchte Zellen gezielt markieren, wenn ausgewählt und dann auf eine Schaltfläche klicken und dann das Programm daran erinnern, welche Zellen bereits farbig sind und welche nicht. Wenn ich also eins färbe, sollte es den Rest der Zeit farbig bleiben, bis ein neues Spiel gestartet wird. Ich habe es so weit, dass ich eine Zelle färben kann, aber ich kann nicht herausfinden, wie man die jTable dazu bringt, die farbigen farbig zu halten.Wie behalte ich eine farbige jTable-Zelle farbig, nachdem ich eine neue ausgewählt habe?
Ich arbeite in Netbeans mit GUI. Dies ist mein erstes Mal und ich bin ein Anfänger, also sei bitte sanft mit mir und meinem Code. Ich habe die Rendering-Tutorials usw. gelesen, kann aber keinen funktionierenden Weg finden, oder ich kann es in meinem kleinen Programm nicht funktionieren lassen.
Dies ist gleich nach der initcomponents();
jTableScoreFormulier.setDefaultRenderer(Object.class,new MyRenderer());
Dann Sie diesen Teil bekommen, um die Tabelle zu machen:
jTableScoreFormulier.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"Rood", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"},
{"Geel", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"},
{"Groen", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2"},
{"Blauw", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2"}
},
new String [] {
"Kleur", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "Sluit"
}
));
Und hier ist mein Renderer:
class MyRenderer implements TableCellRenderer {
public final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Color foreground, background;
if (isSelected) {
foreground = Color.WHITE;
background = Color.BLACK;
} else {
foreground = Color.BLACK;
background = Color.WHITE;
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
}
}
Wie speichere ich den Boolean.FALSE als Standard im Modell? –
Nun, anstatt nur einen String (wie 2, 3, 4 ...) im TableModel zu speichern, müssen Sie ein benutzerdefiniertes Objekt speichern. Dieses Objekt enthält zwei Eigenschaften: 1) die Zeichenkette 2) den Boolean. Dann ruft der Renderer nur beide Werte vom Objekt ab und rendert das Objekt dann basierend auf den Daten. – camickr