JTabbedPane na ogryzku w aplikacjach
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
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
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ć
java -Dswing.defaultlaf=com.zgibek.mac.LookAndFeel -jar Aplikacja.jar
A dodatkową zaletą jest fakt, że to archiwum możemy teraz przenosić
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ł
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:
Czyli inaczej mówiąc - zrobić to samo, co robiliśmy podając opcję -D
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.