23 czerwca 2010

UIManger w Javie, czyli zmiana wyglądu aplikacji.

Witajcie, po dłuższej przerwie :). Dziś, chciałbym wam przedstawić bardzo przydatną wskazówkę w Javie, a dokładniej UIManager. Pewno niejednokrotnie wielu z was zastanawiało się jak zmienić klasyczny wygląd okien aplikacji napisanych przy pomocy architektury biblioteki Swing w Javie. Pokrótce przedstawię jak w prosty sposób zmienić wygląd aplikacji okienkowych. Na sam koniec przedstawię w jaki sposób ustawić odpowiedzi komunikatów JOptionPane w języku polskim.

Do zamiany wyglądu aplikacji służą trzy statyczne metody dostępne w klasie UIManager.

UIManager.setLookAndFeel(String);
Dzięki metodzie setLookAndFeel(String); jesteśmy w stanie przekazać kwalifikowaną nazwę podklasy LookAndFeel, która z kolei odpowiada za wygląd i zachowanie komponentów. Warto zaznaczyć, że klasa ta powinna istnieć i być dostępna, w przeciwnym wypadku metoda zwróci wyjątek: java.lang.ClassNotFoundException. Metodę setLookAndFeel(String) powinno umieścić się w pierwszych liniach kodu konstruktora klasy, w której zamierzamy zmienić wygląd.

Przykład:
public class UIM extends javax.swing.JFrame {

public UIM() {
try {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    }
catch (Exception e) {
      System.err.println("Bład podczas ładowania wyglądu okna.");
     }
initComponents();
}

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UIM().setVisible(true);
            }
        });
    }
}

Jakie argumenty może przyjmować funkcja setLookAndFeel(String)?
„com.sun.java.swing.plaf.windows.WindowsLookAndFeel” – styl Windows (dostępny tylko w systemach Windows).
„com.sun.java.swing.plaf.motif.MotifLookAndFeel” – styl CDE/Motif (dostępny na wszystkich platformach).
„com.sun.java.swing.plaf.gtk.GTKLookAndFeel” – styl GTK+ (dostępny w systemach Solaris, Linux z GTK+).
„javax.swing.plaf.mac.MacLookAndFeel” – styl MAC (dostępny tylko na systemach MAC OS).
„javax.swing.plaf.metal.MetalLookAndFeel” – styl Metal (dostępny na wszystkich platformach – standardowy wygląd Java Swing).
„com.sun.java.plat.windows.WindowsClassicLookAndFeel” – styl klasyczny Windows (dostępny w niektórych systemach Windows).

Poniżej przedstawiam wygląd niektórych styli:

Wygląd Metal:


Wygląd Windows:


Wygląd CDE/Motif:


Następną metodą klasy UIManager, którą warto poznać jest:
getSystemLookAndFeelClassName();. Metoda zwraca natywny wygląd systemu, na którym została uruchomiona aplikacja.
Inaczej mówiąc, jeżeli uruchomimy aplikację na systemie MAC OS i wywołamy metodę: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); uzyskamy wygląd systemu zawarty w podklasie: „javax.swing.plaf.mac.MacLookAndFeel”. Natomiast, gdy uruchomimy aplikację pod system Windows uzyskamy styl „com.sun.java.swing.plaf.windows.WindowsLookAndFeel”.

Dodatkowo warto zwrócić uwagę na metodę: getCrossPlatformLookAndFeelClassName(), która przywraca standardowy wygląd Javy.
np.:
UIManager.setLookAndFeel(UIManager. getCrossPlatformLookAndFeelClassName());


Kolejnym problemem, z jakim spotykają się początkujący programiści Javy, jest ustawienie polskich komunikatów w JOptionPane. Warto zadbać, aby w naszej aplikacji użytkownik nie był zmuszony korzystać z przycisków „Cancel”, „Yes”, „No” lub „OK”. Z pewnością lepszą alternatywą będzie stworzenie własnych odpowiedzi np. „Anuluj”, „Zatwierdź”, „Tak”, „Nie”.
Zmiana treści komunikatów odbywa się przez metodę klasy UIManager.put(Object key, Object value); Najprostszym sposobem zmiany treści komunikatów będzie umieszczenie w metodzie main() następującego kodu:

UIManager.put("OptionPane.yesButtonText", "Tak");
UIManager.put("OptionPane.noButtonText", "Nie");
UIManager.put("OptionPane.cancelButtonText", "Anuluj");
UIManager.put("OptionPane.okButtonText", "OK");

Jako pierwszy parametr, który chcemy zmienić, a następnie wartość tekstową dla danego komunikatu.
OptionPane.yesButtonText – przycisk zatwierdzający wykonanie operacji,
OptionPane.noButtonText – przycisk odmawiający wykonania operacji,
OptionPane.cancelButtonText – przycisk anulowania operacji,
OptionPane.okButtonText – przycisk potwierdzenia wykonania operacji.

Aby lepiej zrozumieć przedstawione zagadnienia, przedstawiam prostą aplikację prezentującą zmianę wyglądu aplikacji napisaną w środowisku NetBenas IDE 6.9 przy użyciu wirtualnej maszyny Javy JDK 6 U 20:
UIManager.java

Nie ponoszę odpowiedzialności za błędy i następstwa powstałe wskutek działania programu i kodu. Pobierasz i użytkujesz na własną odpowiedzialność.