2009-01-15 7 views
8

Ich benutze das Flamingo-Farbband und das Aussehen von Substance Office 2007.Kann ich zwei verschiedene Look and Feel in der gleichen Swing-Anwendung verwenden?

Natürlich jetzt jede Kontrolle hat dieses Aussehen und Gefühl, auch die auf Dialogfeldern.

Was ich möchte, ist etwas wie in Office 2007, wo die Bänder ihre Office 2007 aussehen, aber andere Steuerelemente behalten ihre native Vista/XP Aussehen.

Ist es möglich, bestimmten Steuerelementen ein anderes Aussehen und Gefühl zu geben? Vielleicht mit einer Art Verkettung oder einem Proxy Look and Feel?

Antwort

9

Ich habe gerade entdeckt: Seit Substance 5.0 ist die SKIN_PROPERTY verfügbar.

Es ermöglicht verschiedene Skins zu verschiedenen JRootPanes (d JDialog, JFrame, JInternalFrame)

Ein kleiner Trick zuweisen: Ich JInternalFrame überschreiben die zusätzliche Grenze und den Titel Scheibe zu entfernen, so dass es wie eine randlose Platte aussieht. Auf diese Weise ist es möglich, den Eindruck zu erwecken, dass verschiedene Teile eines Formulars/Dialogs ein anderes Aussehen haben.

2

Hier ist eine Bibliothek, die das Aussehen automatisch ändert. Ich bin mir nicht sicher, ob dies für jede Komponente auf andere Weise gemacht wird, aber Sie sollten einen Blick darauf werfen. pbjar.org

sollte dieses Buch nützlich sein, wenn Sie tief in Aussehen zu gehen und fühlen /java-look-and-feel-design-guidelines-second-edition

Ich würde mich freuen, einige Code Beispiel, um zu sehen, wenn jemand es schreiben kann, beginnen zu bekommen fühlen sich frei.

EDIT:

In diesem Forum-Thread Thread fand ich die folgende Beschreibung

Schaukel verwendet einen Blick & Feel (ein PLAF). PLAFs sind nicht auf einem per-JFrame Ebene angebracht. Sie sind auf einem per-VM Ebene angeschlossen. Es ist fast unmöglich, PLAFs in einer Anwendung zu mischen. Ich habe ein paar Versuche gesehen, alles gescheitert.

+0

Es ist tatsächlich per-AppContext. Sie sollten in der Lage sein, Applets auf verschiedenen Seiten mit unterschiedlichen PL & Fs zu installieren. –

1

Leider macht Swing hinter den Kulissen viele "pseudo-globale" Dinge. AFAIK, die einzige Möglichkeit, dies konsistent zu tun, ist die Verwendung der privaten API AppContext. Jeder AppContext hat seinen eigenen Ereignisversand-Thread und andere "psuedo-globals".

Verwandte Themen