Ich habe daran gearbeitet, eine Java-Anwendung von WindowsLookAndFeel trotz Nimbus-Schwächen größtenteils erfolgreich auf Nimbus umzustellen. Meine Nutzer mögen die Nimbus LaF im Allgemeinen, aber sie mögen keine Details, von denen ich einige geändert habe, indem ich frühere Fragen auf dieser Seite konsultiert habe. Beispiel: Ich habe LeafIcon, ClosedIcon und OpenIcon von Windows LaF kopiert (was sie mochten) und sie in der Nimbus-Version für eine schöne Kombination von LaFs verwendet.
Stuck auf ein letztes (?) Problem.
Ich habe einen JTree mit einem untergeordneten DefaultCellRenderer, um die entsprechenden Knotenanzeigen zu erstellen. Dies funktioniert unter WindowsLookAndFeel einwandfrei.
Problem: Wenn unter WindowsLaF ein Knoten ausgewählt ist, wird der Text des Knotens hervorgehoben und der Effekt ist visuell einfach zu verstehen. Unter Nimbus, wenn ein Knoten ausgewählt ist, wird die Hervorhebung mit einem Balken von (ziemlich dunkler) Farbe gemacht, der die Breite des Baumfensters (nicht nur die Breite des Textes) ausfüllt, und der Effekt ist beunruhigend.
Also: Ich möchte einfach die WindowsLaF-Behandlung von JTree Knotenhervorhebung im Nimbus LaF (dh farbiger Hintergrund nur die Breite des Textes, und vorzugsweise in einer besseren Farbe, die ich wählen kann). Ich vermute, das bedeutet, dass ich den richtigen Maler zuordnen muss "Tree: TreeCell [Focused + Selected] .backgroundPainter", aber ich weiß nicht, wie ich es schreiben soll.
Vorschläge sind sehr willkommen.
BEARBEITEN
Siehe die merkwürdig ausgewählte Knotenhighlight mit Java 7!
%Vor%
Bearbeiten
Der Schlüssel "Tree.selectionBackground" steuert die Hervorhebung auf dem JTree - es erfolgt auf der Baumebene, nicht auf der TreeCellRenderer-Ebene (daher ist es ein wenig verwirrend zu verwalten). Mit diesem Code erhalten Sie eine Baumstruktur, in der Sie die Hervorhebung steuern können:
%Vor%Und hier ist ein Beispiel für das Ändern der Hervorhebung auf Rot. Bitte beachten Sie, dass der Hintergrund des Symbols ebenfalls hervorgehoben wird - dies ist das Standardverhalten für Nicht-Nimbus L & amp; F. Wenn Sie nicht möchten, dass das Symbol hervorgehoben wird, müssen Sie etwas raffinierteres als das Standard-JLabel verwenden, um das TreeCell zu rendern:
%Vor%Ursprüngliche Antwort
Eine der einfachsten Möglichkeiten, dies zu beheben, besteht darin, die ausgewählte Hintergrundfarbe transparent zu machen. Das Problem ist, dass es versucht, den Hintergrund des Etiketts zu malen - das nicht den coolen Nimbus-Maler hat, den die Auswahl von JTree verwendet. Fügen Sie diese Zeile also zu getTreeCellRendererComponent
method:
Eine andere Option ist die Verwendung des Nimbus-Malers für den Hintergrund des TreeCellRenderer - aber das scheint in dieser Situation zu übertrieben zu sein.