Die Gesamterscheinung einer Anwendung, ihr 'Look And Feel', kann in Java zentral festgelegt werden.

Das plattformübergreifende Java Look And Feel, wird auch als 'Metal' bezeichnet. Unter Windows und Apple Mac OS X wird jedoch in der Grundeinstellung das jeweilige durch die durch die Plattformen nativ zur Verfügung gestellte Look And Feel verwendet. Bei der Nutzung eines alternativen Look And Feel ist in jedem Fall zu beachten, dass nicht jedes Look And Feel auf allen Plattformen zur Verfügung steht und dass sich ein gewähltes Layout u.U. ändern kann, da verwendete Komponenten in verschiedenen Look And Feel ein unterschiedliches Aussehen und abweichende Maße annehmen können. Die folgenden Look And Feels stellt Java zur Verfügung:

Zentrales Element des vorliegenden Beispiels ist die Methode updateLAF(). Durch Buttonklick wird in actionPerformed() ein numerischer Index hochgezählt, der in updateLAF() abgefragt wird. Den Werten 1-3 werden dann Namens-Strings je einer bestimmten Look And Feel-Klasse zugewiesen. Der Index 4 setzt diesen auf den jeweils plattformspezifischen. Dies geschieht über die Methode UIManager.getSystemLookAndFeelClassName().
Die Klasse UIManager stellt Methoden zur Verwaltung der Java-Look And Feels bereit, u.a. auch die statische Methode UIManager.setLookAndFeel(String lafName), die das gewählte Look And Feel als das aktuelle setzt.
Die statische Methode SwingUtilities.updateComponentTreeUI(Component c) durchläuft den Komponentenbaum der übergebenen Komponente und setzt deren Elemente auf das neue Look And Feel.

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LookAndFeel extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JLabel label;
    private JButton lfButton;
    private JTextArea area;
    private JScrollPane pane;
    private JMenuItem exit;
    private int lAF = 1;

    public LookAndFeel() {
        initComponents();

        updateLAF();

        this.setTitle("Look and Feel-Demo");
        this.setSize(240, 180);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    private void initComponents() {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Datei");
        exit = new JMenuItem("exit");
        exit.addActionListener(this);
        menu.add(exit);
        menuBar.add(menu);
        lfButton = new JButton("L & F");
        lfButton.addActionListener(this);
        label = new JLabel();
        area = new JTextArea();
        pane = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        JPanel buttPanel = new JPanel(new FlowLayout());
        buttPanel.add(lfButton);

        JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));

        mainPanel.add(label, BorderLayout.NORTH);
        mainPanel.add(pane, BorderLayout.CENTER);
        mainPanel.add(buttPanel, BorderLayout.SOUTH);

        this.add(menuBar, BorderLayout.NORTH);
        this.add(mainPanel, BorderLayout.CENTER);
        this.setLocationRelativeTo(null);
    }

    private void updateLAF() {
        try {
            String plaf = "";
            if (lAF == 1) {
                plaf = "javax.swing.plaf.metal.MetalLookAndFeel";
            } else if (lAF == 2) {
                plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
            } else if (lAF == 3) {
                plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
            } else if (lAF == 4) {
                plaf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
            } else if (lAF == 5) {
                plaf = UIManager.getSystemLookAndFeelClassName();
            }
            setText(plaf);
            label.setText(" L & F Nr.: " + new Integer(lAF).toString());

            UIManager.setLookAndFeel(plaf);
            SwingUtilities.updateComponentTreeUI(this);

        } catch (UnsupportedLookAndFeelException ue) {
            System.err.println(ue.toString());
        } catch (ClassNotFoundException ce) {
            System.err.println(ce.toString());
        } catch (InstantiationException ie) {
            System.err.println(ie.toString());
        } catch (IllegalAccessException iae) {
            System.err.println(iae.toString());
        }
    }

    private void setText(String text) {
        area.setText(text);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == lfButton) {
            lAF++;
            if (lAF > 5)
                lAF = 1;
            updateLAF();
        }
        if (e.getSource() == exit) {
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        new LookAndFeel();
    }
}

Metal Look and Feel

Motif Look and Feel

GTK+ Look and Feel

Aqua Look and Feel

letzte Änderung an:
Properties und Binding


Javabeginners News-Feed News-Feed abonnieren