Ändern Sie die Hintergrundfarbe einer Zeile in einer JTable
Ich habe eine JTable mit 3 Spalten. Ich habe den TableCellRenderer
für alle 3 Spalten wie diese (vielleicht nicht sehr effektiv?).
for (int i = 0; i < 3; i++) {
myJTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
Den getTableCellRendererComponent()
gibt eine Komponente mit einer zufälligen Hintergrundfarbe für jede Zeile.
Wie könnte ich den hintergrund ändern, um eine andere zufällige Farbe, während das Programm läuft?
InformationsquelleAutor der Frage user | 2010-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit wäre speichern Sie die aktuelle Farbe für jede Zeile innerhalb des Modells. Hier ist ein einfaches Modell, das ist fest auf 3 Spalten und 3 Zeilen:
Beachten Sie, dass
setRowColour
AnrufefireTableRowsUpdated
; dadurch wird nur die Zeile der Tabelle aktualisiert werden.Kann der renderer das Modell aus der Tabelle:
Ändern einer Zeile die Farbe wäre so einfach wie:
InformationsquelleAutor der Antwort Richard Fearn
Resumee von Richard Fearn ' s Antwort , um jede zweite Zeile Grau:
InformationsquelleAutor der Antwort Olivier Faucheux
Den anderen Antworten die hier gegeben werden, funktionieren gut, da Sie die gleichen renderer in jeder Spalte.
Ich Neige jedoch dazu zu glauben, dass im Allgemeinen bei Verwendung einer JTable haben Sie unterschiedliche Arten von Daten in jedem columm und daher Sie nicht mit dem gleichen renderer für jede Spalte. In diesen Fällen können Sie finden, die Tabelle-Zeile-Rendering Ansatz hilfreich.
InformationsquelleAutor der Antwort camickr
Dies ist im Grunde so einfach wie das Neuzeichnen der Tabelle. Ich habe nicht gefunden, einen Weg, um selektiv repaint nur einer Zeile/Spalte/Zelle jedoch.
In diesem Beispiel, klicken Sie auf die Schaltfläche ändert die Hintergrundfarbe für eine Zeile und ruft dann repaint.
InformationsquelleAutor der Antwort Mark Peters
Den Aufruf
getTableCellRendererComponent(...)
enthält den Wert der Zelle, für die ein renderer gesucht.Können Sie diesen Wert verwenden, um zu berechnen, eine Farbe. Wenn Sie auch mit einem AbstractTableModel, können Sie einen Wert beliebigen Typs in der renderer.
Sobald Sie eine Farbe haben, können Sie
setBackground()
auf die Komponente, die Sie zurückgeben.InformationsquelleAutor der Antwort Andy Thomas