Portal > Foren > Java > Desktop-Applikationen und Grafik > [Klasse] LAF automatisch der Plattform anpassen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 30.08.2004, 13:41 Nach oben    #1
comrad
Gast
 
Beiträge: n/a
Standard [Klasse] LAF automatisch der Plattform anpassen

Da ich viele Swingprogramme schreibe, die auf unterschiedlichen Plattformen eingesetzt werden, habe ich mir eine Klasse geschrieben, die automatisch die Oberfläche in das typische Betriebssystem-Look-and-Feel integriert.

Vorgehensweise:

Man erstellt seine Swing-Applikation und ruft nach der Erstellung und sinnigerweise _vor_ der Darstellung folgendes auf:

Java Code:
  1. new SystemLAF(this);

fertig


Hier der Quellcode

Java Code:
  1. /*
  2. * SystemLAF.java
  3. *
  4. * Created on 25. August 2004, 15:27
  5. */
  6.  
  7. package LAF;
  8. import javax.swing.UIManager;
  9. import javax.swing.SwingUtilities;
  10. import java.awt.Component;
  11.  
  12. /**
  13. *
  14. * @author  DE16347
  15. */
  16. public class SystemLAF
  17. {
  18.     private final String METAL = "javax.swing.plaf.metal.MetalLookAndFeel";
  19.     private final String WINDOWS = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
  20.     private final String GTK = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
  21.     private final String MOTIF = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
  22.    
  23.     private String OperatingSystem = "unknown";
  24.     private String Version = "0";
  25.     private String LAFtoSet = "";
  26.    
  27.     private Component c;
  28.    
  29.     /** Creates a new instance of SystemLAF */
  30.     public SystemLAF(Component c)
  31.     {
  32.         this.c = c;
  33.         checkOS();
  34.         setLAF();
  35.     }
  36.    
  37.     private void checkOS()
  38.     {
  39.         OperatingSystem = System.getProperty("os.name");
  40.         Version = System.getProperty("java.version");
  41.        
  42.         System.out.println ("OS: " + OperatingSystem + ", Version: " + Version);
  43.     }
  44.    
  45.     private void setLAF()
  46.     {
  47.         // Always set default LAF to Metal
  48.         LAFtoSet = METAL;
  49.        
  50.         if (OperatingSystem.startsWith("Windows"))
  51.             LAFtoSet = WINDOWS;
  52.        
  53.         if (OperatingSystem.startsWith("Linux") && Version.startsWith("1.4"))
  54.             LAFtoSet = GTK;
  55.        
  56.         if (OperatingSystem.startsWith("SunOS"))
  57.             LAFtoSet = MOTIF;
  58.        
  59.         try
  60.         {
  61.             UIManager.setLookAndFeel(LAFtoSet);
  62.             SwingUtilities.updateComponentTreeUI(c);
  63.         }
  64.         catch (Exception e)
  65.         {
  66.             System.err.println ("LAF.SystemLAF() : Could not set LAF");
  67.         }           
  68.     }
  69. }
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.08.2004, 15:22 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hey, ich wollte Dich gerade des Diebstahl bezichtigen. Meine Klasse sieht der Deinen verdammt ähnlich.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.08.2004, 15:23 Nach oben    #3
comrad
Gast
 
Beiträge: n/a
Standard

Heh, ich dacht halt, dass das jemand gebrauchen kann. Natürlich sieht das ähnlich aus, viel anderes kann man ja nicht machen
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.08.2004, 15:53 Nach oben    #4
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Es fehlt aber noch die OSX-Variante.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.08.2004, 17:50 Nach oben    #5
comrad
Gast
 
Beiträge: n/a
Standard

Normalerweise verwendet MacOSX automatisch Aqua, wenn kein LAF gewählt wurde.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.09.2004, 16:04 Nach oben    #6
Beni
Gast
 
Beiträge: n/a
Standard

Guckt mal in die API, da gibts eine Methode UIManager.getSystemLookAndFeelClassName. Was die wohl macht?
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.09.2004, 17:36 Nach oben    #7
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.135
Standard

und was macht die wohl unter Linux nicht korrekt?

Allerdings hätte ich das in Form einer Factory-Methode realisiert... ein Objekt dafür ist einfach zu übertrieben...

So in dieser Form:
Java Code:
  1. try {
  2.     UIManager.setLookAndFeel(LookAndFeelFactory.getSystemLookAndFeel());
  3. } catch(Exception e) {
  4.     e.printStackTrace();
  5. }

Oder...
Java Code:
  1. try {
  2.     LookAndFeelFactory.setSystemLookAndFeel();
  3. } catch(Exception e) {
  4.     e.printStackTrace();
  5. }

Das LookAndFeel sollte übrigens immer gesetzt werden, bevor das GUI angezeigt wird, somit entfällt
Java Code:
  1. SwingUtilities.updateComponentTreeUI(c);
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.09.2004, 14:35 Nach oben    #8
comrad
Gast
 
Beiträge: n/a
Standard

Hi,

ich weiss, dass es das gibt, allerdings funktioniert es bei mir nicht. Und das schon seit Monaten und auf zig Plattformen.

commel
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Icon an Größe von JButton automatisch anpassen. Lautsprecher Desktop-Applikationen und Grafik 2 20.10.2005 15:19
JLabel- & Fenstergröße automatisch anpassen bacarni Allgemeine Java-Programmierung 9 25.02.2005 15:45


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45