kann das klassische Windows-Design nicht erkennen

8

Ich rufe UIManager.getSystemLookAndFeelClassName () auf. Als Ergebnis erhalten Sie WindowsLookAndFeel, auch wenn Sie das aktuelle Thema auf WindowsClassicLookAndFeel setzen. Aber ich erwarte WindowsClassicLookAndFeel. Frage ist, wie kann ich erkennen, dass Windows Classic Theme jetzt aktiv ist

    
fland 07.09.2010, 13:30
quelle

3 Antworten

14

Es sieht so aus, als hätten Sie sich speziell angemeldet, um diese Frage zu stellen, und jetzt melde ich mich ausdrücklich an, um sie zu beantworten! Ich googelte für etwas völlig anderes, aber ich war fasziniert und experimentierte, und hier ist, was ich gefunden habe:

Sie haben Recht mit WindowsClassicLookAndFeel . Diese Klasse erweitert WindowsLookAndFeel , überschreibt jedoch nichts und wird selbst dann nicht verwendet, wenn Windows Classic aktiv ist. Also habe ich in den Code von WindowsLookAndFeel geschaut und einen interessanten internen Code gefunden, der auf die Paket-private Klasse XPStyle verweist. Diese Klasse scheint ein Singleton zu sein, und die Getter-Methode getXP() gibt ihre Instanz nur zurück, wenn das XP-Thema aktiv ist:

%Vor%

Interessanterweise sucht der Code erneut nach WindowsClassicLookAndFeel , aber wir wissen, dass er nicht mehr verwendet wird (vielleicht hat er sich geändert) ... Aber der beste Teil ist die Überprüfung der Desktop-Eigenschaft win.xpstyle.themeActive Extrahieren aus dem Code Ich habe folgenden Test gemacht:

%Vor%

Sie können diese Klasse in Ihr Programm importieren und die isWindowsClassicLAF() -Methode aufrufen, nachdem Sie Ihr Look & amp; Feel an einem beliebigen Punkt eingestellt haben. Ich habe auch ein Beispiel dafür gegeben, wie Sie während der Laufzeit Änderungen am Thema abhören können.

Dies ist unter XP getestet und getestet. Wenn der Benutzer von einem XP-Thema zu einem anderen wechselt, wird der Listener nicht ausgelöst, aber wenn der Benutzer von einem Thema zu Classic wechselt, oder umgekehrt, wird es.

Ich hoffe, das hilft!

    
BoffinbraiN 08.12.2010 11:16
quelle
2

Ich bin nicht ganz sicher, was Sie fragen.

Wenn Sie fragen, welches Design / Erscheinungsbild SWING gerade verwendet, versuchen Sie es UIManager.getSystemLookAndFeelClassName () .

Wenn Sie herausfinden wollen, welches Thema Windows verwendet - ich weiß es nicht. Wahrscheinlich nicht ganz einfach, das herauszufinden.

Bearbeiten: Ein schneller Hack könnte sein (abgesehen davon, JNA / JNA zu verwenden, um einige Windows API direkt abzufragen, welches Thema verwendet wird), würde einen neuen JFrame erstellen, ihn in einen Bereich plazieren, erfassen ein kleiner Teil dieses Rahmens und vergleichen Sie ihn mit Stichproben von Grenzen (die Sie vorher erstellen und mit Ihrem Code versehen müssen, um das gerade aufgenommene Bildschirm-Capture-Bit und alle von Ihnen gelieferten Rahmenbilder programmatisch vergleichen zu können )

    
Tedil 07.09.2010 13:37
quelle
-1

UIManager.getLookAndFeel() wird derzeit zurückgegeben installierte LaF. getSystemLookAndFeel() gibt Look and Feel zurück, das als aktuelles Systemthema aussehen würde, z. WindowsLookAndFeel unter Windows GTKLookAndFeel unter Linux MOtifLookAndFeel unter Solaris etc.

    
Denis Tulskiy 07.09.2010 15:18
quelle

Tags und Links