Entwerfen einfache CellRenderers für Nimbus Look and Feel
-
19-09-2019 - |
Frage
Ich habe eine einfache ish CellRenderers, die von einigen JLabel
s zusammengesetzt ist (den Renderer selbst JPanel
erstreckt) und ich versuche, es zu bekommen vernünftig im Nimbus Look and Feel zu machen. Im Grunde, was passiert ist, dass in der leichter Zeilen (wie Nimbus hat alternative Reihe Färbung ), meine spezifischen CellRenderers die Tabelle Hintergrundfarbe verwendet (die viel dunkler als beide ist leichter und je dunkler Zeile Farben). In meinem Renderer ich tun:
if (isSelected) {
setBackground(table.getSelectionBackground);
}
else {
setBackground(table.getBackground);
}
Wenn ich diesen ganzen Codeblock kommentieren Sie dann dann all meine Zeilen sind in den dunkleren Zeile Farbe (nicht der Tabellenhintergrund, aber nicht in der abwechselnden Farben entweder). Ich bin sicher, dass ich nicht einmal verstehen, was los sein! Wie ist der obige Codeschnipsel Zellen mit verschiedenen Hintergrundfarben überhaupt produzieren? Ist die table.getBackground
Farbe zwischen Anrufungen meiner Methode zu ändern?
Ich habe versucht, diesen Code-Snippet mit:
Color alternateColor = sun.swing.DefaultLookup.getColor(
peer,
peer.getUI,
"Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
setBackground(alternateColor);
, die in der DefaultTableCellRenderer
Klasse. Und es scheint nicht in keiner Weise beeinflusst zu haben. Hat jemand benutzerdefinierte Zelle Renderer bekam mit Nimbus zu arbeiten?
Bearbeiten : Wenn jemand interessiert ist, dies erwies sich als ein Problem zu sein mit Scala Tabellenzelle Renderer, wie ich Scala tatsächlich verwendet wird, nicht Java. Die akzeptierte Antwort unten funktioniert gut in einem Java-Programm. Separate Frage eingereicht hier .
Lösung
Ihr erstes Stück Code, wenn fine.I denken Sie UIManager.getColor("Table.alternateRowColor")
für abwechselnde Reihen und table.getBackground () sonst verwenden. Für ausgewählte Zeilen Verwendung table.getSelectionBackground (). So Ihr Code aussehen könnte
if (isSelected) {
setBackground(table.getSelectionBackground());
}
else {
if ( row % 2 == 0 ) {
setBackground(UIManager.getColor("Table.alternateRowColor"));
} else {
setBackground(table.getBackground());
}
}
Vergessen Sie nicht, stellen Sie sicher, dass Ihre Platte undurchsichtig ist und die Etiketten sind transparent.
Hier ist eine gute Verbindung zu Nimbus UI Standardwerten: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html