Wyklikanie GUI a dobra sztuka programowania w Javie

0

Witam wszystkich. Chciałbym poruszyć pewien temat ponieważ nie potrafię znaleźć nigdzie dobrej odpowiedzi na moje pytanie. Na wstępie powiem że na co dzień programuje w androidzie od 2 lat. Wcześniej liznąłem jave i jest jedna rzecz w javie która mnie notorycznie denerwuje gdy zasiadam do tworzenia nowej aplikacji. Chodzi o budowę GUI. Uczony bylem aby GUI zakodzić w 100% tj nie używać żadnych gui designerow takich jak np w Visualu czy Netbeansie i innych. W Androidzie przyzwyczajony jestem do tego że w prosty szybki i łatwy sposób mogę wyklikać widok, nawet te bardzo skomplikowane z wieloma warstwami, kilkadziesiąt kontrolek etc. W C# w Visualu też idzie to szybko. W Javie coś podobnego to jest dla mnie jakaś masakra gdy w ogolę o tym pomyślę. Wiadomo ze praktyka czyni mistrza ale zdarzało mi się już kilka razy że zakodziłem coś poprawnie a w efekcie końcowym wychodziły jakieś cyrki co często powoduje to ze aby nie marnować czasu zmieniam założenia co do programu co nie powinno mieć zwykle miejsca (imo). W androidzie jak występują jakieś cyrki to wchodzę do designera graficznego i widzę od razu co jest nie tak zamiast szukać po kodzie. Wiem ze designery dla projektów w Javie potrafią wypluć dużo niepotrzebnego/nieczytelnego kodu (w androidzie to nie ma miejsca). Dlatego tez chciałbym się dowiedzieć od doświadczonych programistów Javy jaka jest dobra/właściwa sztuka dla tworzenia GUI. Pisanie GUI w 100% czy jednak posłużenie się jakimś designerem? via Netbeans, Eclipse etc. A może jeszcze jakieś inne podejście? Głównie chodzi o awt/swing. Chcę się zabrać za napisanie programu w Javie na magisterkę i chciałbym go wykonać w taki sposób aby mieć co pokazać w przyszłości potencjalnemu pracodawcy. Jeżeli przeczyta to ktoś kto programuje w Javie zawodowo to bardzo bym prosił o wytłumaczenie jakie rozwiązania się stosuje.

0

Podepnę się pod pytanie, czy ktoś próbował używać Springa w Swingu? Piszę teraz warcaby klient-server i zastanawiam się w jak najlepszy sposób podpiąć klasy widoku do Springa. Logikę łatwo podpiąć, ale GUI już trudniej. Obecnie zrobiłem tak, że Ramki oraz Panele to tez beany Springowe.

0

jeżeli chodzi o Swing'a to polecałbym raczej nie używać designera drag&drop. Lepiej napisać od podstaw ale kosztem dużego nakładu pracy. poza tym imo trzeba choć odrobinę liznąć Swing'a aby całkiem swobodnie w nim napisać GUI - chodzi głównie o składanie layout'ów.

0

No i właśnie mi chodzi o ten nakład pracy. Wszystko fajnie jak się ma ten czas ale wiadomo że pracując jako programista jest duże nastawienie na szybkość pracy. Tam należy unikać dodatkowego nakładu pracy dlatego pytam jakie rozwiązania się zazwyczaj wtedy stosuje? Ja rozumiem że na początku należy pisać z palca wszystko aby zrozumieć rozkłady layoutow, umieć się tym posługiwać itd. ale koniec końców wykodzenie skomplikowanego layoutu programowo zajmuje wielokrotnie więcej czasu niż wyklikanie większości w designerze i wierzyć mi się nie chce że w firmach świadomie się marnuje tak czas.

1

Ja Swinga w swoich hobbystycznych projektach wyklikuję. Nie widzę powodu by męczyć się z czymś co i tak mnie nie kręci. Klikanie jest proste, szybkie i przyjemne. Aktualnie Oracle mocno promuje JavęFX, a JavaFX udostępnia coś takiego jak FXML, który jest XMLem opisującym layout. Do wyklikiwania FXMLa jest Scene Builder, więc nawet FXMLa nie trzeba klepać w 100% ręcznie. .NET też udostępnia opisywanie GUI za pomocą XMLa (ZTCW to chyba JavaFX właśnie 'zainspirowała' się tymi .NETowymi rozwiązaniami).

GUI Designer w NetBeans, czyli Matisse, to jest (można powiedzieć) taki krok pośredni między klepaniem w czystym Swingu a wyklikiwaniem XMLa. Tzn Matisse tworzy sobie własnego XMLa (we własnościowym nieustandaryzowanym formacie) tuż obok wygenerowanego pliku .java. Tego XMLa możesz sobie podejrzeć, to chyba plik z rozszerzeniem .form. Podstawowa różnica między .form a FXML jest taka, że JavaFX ma wbudowane wsparcie dla FXMLa, a NetBeans generuje pliki .java od nowa z plików .form przy każdym otwarciu (przebudowaniu?) projektu i zmianach w tych formach.

W dużych firmach robi się jeszcze coś innego - tworzy własne frameworki nad Swingiem (czy dowolnym innym UI toolkitem). Dzięki temu proces tworzenia nowego okienka jest ustandaryzowany, a także korekty UI w całej aplikacji są scentralizowane - np jeśli mamy klasę KorpoLabel która np ma czcionkę KorpoFont i chcemy ją zmienić, to zmieniamy w klasie KorpoLabel fonta na GunwoFont i po sprawie. Do tego mamy KorpoLayout, KorpoFabrykaDialogów.zbuduj(KorpoPanel środek) itp itd
W dużych KorpoProjektach designerów się chyba nie stosuje powszechnie bo to raczej wymagałoby stworzenia KorpoGuiDesignera, a to w sumie nie ma sensu wielkiego. Kolejne okienko zawsze można zrobić metodą Kopiego-Pejsta, z potem wprowadzić małe poprawki. Przy odpowiednio dużej aplikacji jest dużo okienek do wyboru z których można zerżnąć design.

Teoretycznie, moim zdaniem, te rozwiązanie z NetBeansa, czyli .formy tłumaczone na pliki .java można by (przy odpowiednio dużym nakładzie pracy) zrefaktorować tak, by pliki .form ładować do finalnych binarek (.JARków), a (bajt)kod do interakcji ze Swingiem tworzyć w locie przy starcie GUI. Miałoby to jedną główną zaletę - przyciszyłoby ludzi którzy narzekają na ten wygenerowany kod. No i być może byłaby jeszcze jedna zaleta - możliwość edycji GUI już po zbudowaniu aplikacji przez edycję XMLa bezpośrednio, ale kto by z tego korzystał? Za to prawdopodobnie byłoby dużo wad, bo Swing raczej nie był projektowany z myślą o jakichś XMLach.

0

u nas w firmie pisząc aplikacje desktopową w swingu ,używamy designera w netbeansie, pracujemy już tak od paru lat i nie widzimy żadnych minusów,
oczywiście jakieś dynamiczne tworzenie formularzy itp. trzeba pisać ręcznie ,ale wszystko co statyczne to klikamy

0

Super :) Dziękuję za wszystkie odpowiedzi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1