Frage

Ich habe eine einfache ish CellRenderers, die von einigen JLabels 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 .

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top