2017-08-11 2 views
0

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; 
} 
} 

}

Antwort

0

Ich kann nicht herausfinden, wie man die jTable die farbigen gefärbt halten kann.

Eine Möglichkeit besteht darin, die Informationen im TableModel zu speichern. Vielleicht speichern Sie einfach Boolean.TRUE oder Boolean.FALSE im Modell, um anzuzeigen, welche Zellen ausgewählt sind. Der Standardwert für alle Zellen wäre Boolean.FALSE Wenn Sie dann auf eine Zelle klicken, aktualisieren Sie das TableModel mit der Methode setValueAt(Boolean.TRUE, row, column), um die Auswahl zu ändern.

Dann wird Ihr Renderer Code wird:

//if (isSelected) { 

Boolean colored = (Boolean)value; 

if (colored) { 
    ... 
+0

Wie speichere ich den Boolean.FALSE als Standard im Modell? –

+0

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

0
jTableScoreFormulier.setRowSelectionAllowed(true); 
jTableScoreFormulier.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 

Dies ermöglicht Multi-Auswahl

+0

, dass in der Button-Aktion ausgeführt Klasse platziert werden soll? –

+0

Dies ermöglicht die Mehrfachauswahl auf der von Ihnen verwendeten JTable. –

Verwandte Themen