Java Tutorial #6 - "Umschalten zwischen Swing-Theme METAL und OCEAN"

Autor: 'Kriz'

Wichtige Hinweise!!!

Die Grundlagen über die Java-Programmierung ist nicht Bestandteil der Tutorialreihe! Zum Lernen von Java empfehle ich das hervorragende Online-Tutorial von Guido Krüger, welches man sich kostenlos von www.javabuch.de runterladen kann.

Dieses Tutorial ist ausschließlich ab Java 5 (JDK 1.5.x) gedacht!


In diesem Tutorial geht es um das Umschalten der Themes des MetalLookAndFeel in Swing-Anwendungen. Seit dem neuen JDK 1.5.x (offiziell Java 5 genannt) gibt es nun die Möglichkeit, dem Standard-LookAndFeel von Swing - besser bekannt als mausgraues MetalLookAndFeel - ein neues Aussehen zu verpassen. Das neueste Aussehen von Metal ist Ocean, ein helles Outfit für Metal. Manchen Leuten (wie mir ;) erscheint Ocean aber zu grell und „klickibunti“. Da die JVM 5 aber von Haus nun Ocean als Standard-MetalLookAndFeel lädt, stellt sich die Frage: Wie zum Geier kommt man wieder zum altbewährten, mausgrauen MetalLookAndFeel? Dieses Tutorial bringt die Lösung.

Zuerst einmal etwas graue Theorie:

Java 5 separiert sich selber zum Thema LookAndFeel in zwei Teilbereiche: Die festen LookAndFeel Klassen (wie z.B. Motif/CDE, Windows oder Apple-Macintosh usw.), die man wie gehabt benutzen kann (sofern auf der Plattform vorhanden) und dem nagelneuen Konzept der Themes. Ein Theme ist eine Art Maske für ein LookAndFeel-Gerüst, ähnlich den Themes bei WindowsXP oder (sehr) entfernt vergleichbar mit den WindowManagern unter *NIX/Linux (GNOME, KDE, icewm, Motif usw.). Diese Maske wird über ein Basis LookAndFeel-Gerüst gespannt und gibt so der gesamten Anwendung ein neues Aussehen.

Und so haben es auch die Swing-Entwickler gemacht: Sie definierten eine Basis durch MetalLookAndFeel und erfanden eine neue, abstrakte Zusatzklasse mit Namen MetalTheme. Alle Themes müssen von MetalTheme abgeleitet sein. Das bekannte mausgraue Theme (jetzt bekannt unter dem Namen STEEL) trägt den Namen DefaultMetalTheme. Das neue, in Java 5 eingeführte und leider nun standard-geladene Theme heißt OCEAN.

Der zweite Weg führt über das Definieren des Themes-Aussehens über eine XML-Datei. Dieses Thema lasse ich hier aber mangels Kenntnisse erstmal unter den Tisch fallen.

Wir merken uns:

Das Standard-Metal-PLAF besitzt nun zwei Aussehen (themes):

  • Steel (der alte Standard bis Java 2)
  • Ocean (der neue Standard ab Java 5)

Das Codegerüst

Wie erwähnt startet Java 5 eine Swing-Anwendung automatisch mit dem Metal-LookAndFeel und dem Ocean-Theme. Hier sehen wir nun, wie man sehr schnell auf den alten Steel-Theme umschalten kann. Wir erstellen eine neue Datei und implementieren folgenden Java Code:

// SteelFrame.java
 
/* Eventuell hier erst das Paket definieren, falls erforderlich! */
 
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.metal.*; // Hier liegen die Themes für das Metal-PLAF
 
public class SteelFrame
extends JFrame
{
    public static void main(String[] args)
    {
        new SteelFrame();
    }
 
    public SteelFrame()
    {
        super("SteelFrame Testfenster");
 
        setLocation(100, 100);
        setSize(400, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        try
        {
            // Steel-Theme setzen
            MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
 
            // Alle Swing-Komponenten neu initialisieren
      UIManager.setLookAndFeel(new MetalLookAndFeel());
 
      // Alle Swing-Komponenten updaten
   SwingUtilities.updateComponentTreeUI(this);
        }
        catch(ClassNotFoundException exc)
        {
            // Fehlermeldung ausgeben und Programm mit Code 1 beenden
            System.err.println(exc.getMessage());
            dispose();
            System.exit(1);
        }
 
        setVisible(true);
    }
}

Man kann das Programm nun starten. Es wird ausgeführt und wird automatisch auf den alten Stell-Theme des MetalLookAndFeels umgeschaltet. Und so schaltet man danach wieder auf den Ocean-Theme zurück, indem man folgende Anweisung ausführt:

try
{
    // Ocean-Theme setzen
    MetalLookAndFeel.setCurrentTheme(new OceanTheme());
 
    // Alle Swing-Komponenten neu initialisieren
    UIManager.setLookAndFeel(new MetalLookAndFeel());
 
    // Alle Swing-Komponenten updaten
    SwingUtilities.updateComponentTreeUI(this);
}
catch(ClassNotFoundException exc)
{
    // ...
}

Das war's schon =)

Tipp

Leider sind die neuen Klassen in Java 2 nicht bekannt. Wenn man also möglichst portabel programmieren möchte, dann sollte man vorher abfragen, um welche Java-VM Version es sich dabei handelt. Bei Java VMs bis 1.4.x sollte man dann die Möglichkeiten von auswählbaren Themes beim MetalLookAndFeel abschalten, es wird sowieso Steel-Theme geladen. Allem anderen ab 1.5.x sollte beim Auswählen des MetalLookAndFeels die Möglichkeit zur Wahl des Themes angeboten werden.

Folgende kleine Methode hilft beim Prüfen auf Java 5:

public boolean isJava5()
{
    char master = System.getProperty("java.version").charAt(0),
         slave = System.getProperty("java.version").charAt(2);
 
    return (master >= '1' && slave >= '5');
}

Anmerkung

Dieses Tutorial stammt aus der ehemaligen Sammlung des resourcecode.de und konnte dank der freundlichen Zustimmung des Autors in das thewall-Wiki übertragen werden.

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
Angemeldet als: ()
coding/java/java_tut_6.txt · Zuletzt geändert: 2008/11/03 18:47 von TomMe