Podczas wstępnych badań tego pytania odkryłem, że w Internecie nie ma zbyt dobrze zorganizowanych informacji na temat najlepszych praktyk Java Swing. Więc myślę, że dam Stack Exchange szansę na zbudowanie tej jednej wspaniałej listy.
Jakie są najlepsze praktyki programowania Java Swing? Co znalazłeś dla siebie i dlaczego?
Odpowiedzi:
Mogę tylko odpowiedzieć za to, co dla mnie zadziałało. Inni komentatorzy zwrócili uwagę, że GUI Java ogólnie wpadają w „niesamowitą dolinę” o niezbyt rodzimym wyglądzie i odczuciu, i nie kwestionuję tego.
Dobrze wykorzystaj Action API. Pozwala lepiej łączyć różne działania, które wykona użytkownik, i pozwala znacznie łatwiej łączyć je ze skrótami, klawiszami akceleratora, przyciskami i innymi obiektami wejściowymi.
Użyj odpowiedniego menedżera układu. GridBagLayout jest niezwykle potężny, ale posunąłbym się do stwierdzenia, że nie da się go utrzymać bez nadmiernej ilości komentarzy. Kiedy uruchamiam narzędzia do analizy kodu statycznego, takie jak Sonar, na starszej aplikacji GUI, którą utrzymuję, zawsze wskazuje to na ogromne ilości magicznych liczb, aby układ GridBags był odpowiedni. Odniosłem duży sukces z GroupLayout, który pozwala uniknąć konieczności wyrównywania pikseli.
Jeśli uważasz, że potrzebujesz JDialog ... prawdopodobnie nie. Okna dialogowe są okropne, jeśli chodzi o wrażenia użytkownika - ta aplikacja postanowiła używać ich w każdym menu i formie oraz w dziwaczny sposób egzekwować zawsze obowiązujące reguły. To zamieniło się w koszmar konserwacji, kiedy tak naprawdę musieliśmy coś ostrzec w menu. Sfrustruj kliknięcie w nieokreślalne - a tym samym nie do odrzucenia - okna dialogowe.
W razie potrzeby użyj SwingWorker zamiast zwijania własnej wielowątkowości. Bardzo łatwo jest rozszerzyć SwingWorker i wykonać długie zadanie, zapewniając regularne aktualizacje z powrotem do GUI. Pomyśl o pobraniu aktualizacji klienta. Zajmie się ona planowaniem wątków roboczych dla Ciebie i pozwoli ci opublikować procent pobierania z powrotem do widoku, dzięki czemu możesz zaktualizować pasek postępu lub to, co masz.
To wszystko, co mogę zasugerować, w moim, co prawda, ograniczonym doświadczeniu.
źródło
JDialog
jest całkowicie w porządku - o ile używasz go do dialogów.JDialog
czy nie).Powiedziałbym, że jedną z pierwszych rzeczy nie jest bezpośrednie działanie. Układ w Swing (IMHO) jest okropny, a próba stworzenia z niego jakiejkolwiek znaczącej aplikacji to koszmar.
Dwoma z wielu alternatywnych menedżerów układu , których użyłem, są układy MigLayout i MultiSplitPane. MigLayout ma bardziej ogólny cel i sprawia, że każdy układ, o którym myślisz, jest łatwy i zdrowy. MultiSplitPane jest bardziej szczegółowy; Użyłem go do stworzenia prostych układów graficznych dla GUI, które nie były zbyt skomplikowane.
EDYCJA : To nie zastępuje zamachu . Jeśli musisz użyć Swing, nadal możesz używać tych menedżerów układu, ponieważ zarządzają one tylko zamachem, a nie zastępują go.
Oczywiście lepszą alternatywą jest po prostu nie używanie Swing. Swing jest mocno krytykowany za okropność w pracy, nie wygląda na rodzimego i powolny. Istnieje wiele alternatyw, które nauczyły się od swingu tego, czego nie robić, jak Qt, SWT, i myślę, że nawet GTK. Są to świetne długoterminowe rozwiązania problemów związanych z bólem głowy Swinga
EDYCJA : Jak powiedział @Lord Torgamus, nie są one tak naprawdę dostępne, jeśli jesteś zmuszony użyć Swinga. Jeśli zamierzasz je wykorzystać, najlepiej to załatwić podczas tworzenia projektu, a nie 3/4 na drodze lub podczas pobierania starszych aplikacji.
Chciałbym również zauważyć, że większość alternatywnych GUI korzysta z bibliotek natywnych, aby wyglądać jak system operacyjny, a następnie wrócić do Swinga lub innego GUI Pure Java.
źródło