Kann ich zwei verschiedene Look and Feel in derselben Swing-Anwendung verwenden?

8

Ich verwende das Flamingo-Farbband und das Aussehen und Verhalten von Substance Office 2007.

Natürlich hat jetzt jedes -Steuerelement dieses Aussehen und Verhalten, sogar solche in Dialogfeldern.

Was ich will, ist so etwas wie in Office 2007, wo die Bänder ihre Office 2007-Look, aber andere Steuerelemente behalten ihre nativen Vista / XP Look.

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?

    
Daniel Rikowski 15.01.2009, 08:47
quelle

3 Antworten

9

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

Erlaubt die Zuordnung verschiedener Skins zu verschiedenen JRootPanes (d. h. JDialog , JFrame , JInternalFrame )

Ein kleiner Trick: Ich überschreibe JInternalFrame , um den zusätzlichen Rahmen und den Titelbereich so zu entfernen, dass er wie ein randloses Fenster aussieht. Auf diese Weise ist es möglich, den Eindruck zu erwecken, dass verschiedene Teile eines Formulars / Dialogs anders aussehen.

    
Daniel Rikowski 05.03.2009, 10:15
quelle
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

Dieses Buch sollte nützlich sein, wenn Sie tief in Aussehen und Gefühl gehen wollen / java-look-and-feel-design-richtlinien-zweite-edition

Ich wäre froh, ein Codebeispiel zu sehen, wenn jemand es schreiben kann, fühlen Sie sich frei, anzufangen.

BEARBEITEN:

In diesem Forum-Thread Thread habe ich die folgende Beschreibung gefunden

  

Swing verwendet einen Look & amp; Fühlen (ein PLAF).   PLAFs sind nicht an einem per-JFrame angehängt   Niveau. Sie sind auf einer per-VM angehängt   Niveau. Es ist fast unmöglich zu mischen   PLAFs in einer Anwendung. ich habe   einige Versuche gesehen, alles gescheitert.

    
Markus Lausberg 15.01.2009 09:48
quelle
1

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

    
Tom Hawtin - tackline 15.01.2009 14:23
quelle