JTabbedPane na ogryzku w aplikacjach

Obiecałem w sierpniu, że napiszę jak zmienić istniejące programy w javie i korzystające z JTabbedPane, żeby wyglądały tak jak na innych platformach i dzięki temu dawały się używać. Nadeszła pora spełnić obietnicę. Ponieważ nic w kodzie się nie zmieniło, bo działa i ma się dobrze, zatem pragnących poznać co, dlaczego i jak odsyłam to poprzedniego artykułu.
Całość rozwiązania jest prosta i opiera się na mechanizmach, które udostępnia nam java, zatem bez obaw, nie będzie potrzebna żadna ingerencja w kod, nie będą potrzebne źródła, dekompilacje czy inne straszne sprawy Happy
Wystarczy, że ograniczymy się do zdefiniowania właściwości swing.defaultlaf dla uruchamianej aplikacji (np. poprzez wykorzystanie opcji "-D" programu java).
Całość rozwiązania będzie się opierała na przedstawionym poprzednio kodzie, który - dla Waszej wygody - umieściłem w gotowym do wykorzystania archiwum, który możecie pobrać:
LookAndFeel.jar (Dla porządku - zezwalam niniejszym na jego swobodne wykorzystanie przez Was, tak samo zresztą jak samego kodu)
Zatem: zakładając, że wywołujemy naszą aplikację z Terminala w następujący sposób:
java -jar Aplikacja.jar
to musimy zdefiniować wspomnianą zmienną, zatem nasze wywołanie wyglądać będzie następująco:
java -Dswing.defaultlaf=com.zgibek.mac.LookAndFeel -jar Aplikacja.jar
Oczywiście należy pamiętać, żeby wspomniane archiwum było dostępne na ścieżce ładowania klas (ang. classpath), bo inaczej dostaniemy
Exception in thread "main" java.lang.Error: Cannot load com.zgibek.mac.LookAndFeel.
Uruchamiając program w javie istnieje parametr
-cp (-classpath), dzięki któremu można podać ścieżkę przeszukiwania klas. Niestety, w przypadku uruchamiania aplikacji z archiwum jar argument ten jest ignorowany. Na szczęście w prosty sposób dorzucimy nową bibliotekę do archiwum. Metody są dwie: pierwsza polega na dorzuceniu klasy do istniejącego archiwum, tak, jakby od zawsze tam była. Możemy tak zrobić, gdyż w tym przypadku jest to tylko jedna klasa, ale bardziej uniwersalne jest dopisanie nowego archiwum na listę przeszukiwań.
Wystarczy wybrać jeden z tych sposobów, ale ponieważ mamy tylko jedną klasę, to dużo prostszy jest pierwszy z nich Happy

Podane poniżej komendy należy wykonywać oczywiście w Terminalu.
  • Należy pobrać wspomniane wcześniej archiwum LookAndFeel.jar
  • Teraz trzeba je rozpakować:
    jar xf LookAndFeel.jar
    W wyniku otrzymamy nowe drzewo katalogów: com/zgibek/mac/ i na końcu plik LookAndFeel.class
  • Teraz należy dodać plik do archiwum aplikacji (Aplikacja.jar):
    jar uf Aplikacja.jar com/zgibek/mac/LookAndFeel.class
  • Pozostaje tylko ponownie spróbować uruchomić Happy
    java -Dswing.defaultlaf=com.zgibek.mac.LookAndFeel -jar Aplikacja.jar
Proste, nie? Happy
A dodatkową zaletą jest fakt, że to archiwum możemy teraz przenosić Happy

Powyższe uwagi są cenne, jednak nie wszystkie programy w javie uruchamiany w podany powyżej sposób. Aplikacja, która jest przygotowana do pracy na ligolu to tak naprawdę katalog z rozszerzeniem
app który oprócz samego archiwum zawiera kilka przydatnych rzeczy.
Następny przykład to modernizacja mojego ulubionego środowiska programistycznego IntelliJ Idea.
Świetnie się do tego nadają wersje w szczególności sprzed 8.x, gdyż w którejś z ósemek naprawili ten problem. Żeby było ciekawiej - w Ideii zrobili własną implementację zakładek, gdyż nie mogli sobie z nimi poradzić. No i zawsze jest powód, aby sprzedać nowszą wersję. Cóż za radość, że można ten problem rozwiązać nawet nie posiadając źródeł Happy

A oto program naprawczy dla IntelliJ IDEA

Otwórz katalog z programami, znajdź IntelliJ IDEA. Domyślnie Mac OS X rozpoznaje takie katalogi i prezentuje je jako aplikacje. Cały czas możemy jednak zajrzeć do środka. W tym celu kliknij na tym programie trzymając wciśnięty Control aby pokazać menu kontekstowe. Wybierz Pokaż zawartość pakietu

Następnie wkopiuj wspominane już kilkukrotnie archiwum LookAndFeel.jar, tak, żeby wyglądało to tak jak poniżej:



W ten prosty sposób dodaliśmy nową bibliotekę do zestawu oryginalnych.

To już prawie koniec, zostało tylko poinstruować system, żeby ją wykorzystał. A to jest dużo prostsze niż wcześniejsze zabawy. Znajdź plik
Info.plist, tak jak poniżej:


a potem go otwórz (choćby TextEditem). Jest to najzwyklejszy xml, zatem łatwo edytowalny czymkolwiek. To, co nas interesuje to sekcja
dict dla klucza (ang. key) Properties, jednej z ostatnich w pliku. Trzeba dopisać dwie linijki:
swing.defaultlaf
com.zgibek.mac.LookAndFeel
Czyli inaczej mówiąc - zrobić to samo, co robiliśmy podając opcję -D Happy
Efekt końcowy na poniższym obrazie (wyróżnione linie to te dodane):



Cóż, na koniec nie zostaje mi nic innego, jak odesłać zainteresowanych tematem do Java Tutorials, a ściślej do
How to Set the Look and Feel.

blog comments powered by Disqus