Wyklikanie GUI a dobra sztuka programowania w Javie

Wyklikanie GUI a dobra sztuka programowania w Javie
DA
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 10 lat
  • Postów:7
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.

bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
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.

edytowany 1x, ostatnio: bakeraw2
DZ
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
  • Postów:76
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.

DA
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 10 lat
  • Postów:7
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.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 4 godziny
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 4x, ostatnio: Wibowit
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

DA
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 10 lat
  • Postów:7
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)