Tworzenie GUI w Javie

0

Zastanawiałem się czy nie wrzucić tego do Off Topic ale pewnie tutaj też znajdą się odpowiedzi.

Mam problem z tworzeniem GUI w Javie. Chodzi o aplikacje desktopowe albo ogólnie klienckie, których GUI oparte jest na Swingu. Wiem, że główne przeznaczenie Javy jest inne niż wyklikowanie okien ale przydałoby się jakieś sensowne wsparcie w tej dziedzinie, żeby nie odstawać od konkurencji.
Używam designera wbudowanego w NetBeansa, próbowałem też tego w Eclipse, niestety z tymi samymi efektami.

Przy całym narzekaniu na borlanda trzeba mu oddać pokłon za świetny designer. Po przesiadce na Javę przeżywam koszmar za każdym razem gdy chce wrzucić na formę grupkę obiektów. Po prostu dzieje się coś takiego że ruszam jedne button a w tym czasie 15 innych elementów zmienia rozmiary i położenia. Czytałem po necie, że dużo ludzi ma z tym problem. Próbowałem już różnych sposobów, używałem paneli w kosmicznych ilościach, mieszałem przeróżne rozkłady layoutu ze sobą i efekt zawsze jest ten sam.
Frustracja niesamowita mnie dopada. Jak podchodzę do projektowania GUI to mam rozrysowany jakiś pomysł a kończy się zawsze na tym, że kiedy osiągnę efekt w pewnym stopniu zbliżony do zamierzonego i jest to w miarę stabilne to zostawiam tak jak jest żeby już nic nie zepsuć. A kiedy po tygodniu czy dwóch przyjdzie mi dorzucić na formę jednego radio buttona to zamiebam się do tego jak pies do żaby modląc się żeby wszystko się nie rozleciało.

Zdarzają się np takie sytuację że mam jakiś dialog i 4 text fieldy jeden nad drugim i za nic w świecie nie mogę ustawić im równej szerokości bo jeden równa do ramki dialogu, drugi do jakiegoś labela, trzeci do pierwszego a czwarty ma chyba randomową wartość. A jak zmienię jeden element to reszta też zmienia się w niemożliwy do przewidzenia sposób.

W borlandzie wyklikałem wszystko w godzinę z uśmiechem na twarzy i widok miałem z głowy, mogłem się zabierać za resztę, kontroler itd a tutaj muszę ciągle iść na kompromisy, a zaprojektowanie sensownego interfejsu zajmuje tak długo czasu, że aż żal tak marnować, a i tak jest to interfejs okrojony względem założonego.

Jak dla mnie to Java ma same zalety ale te rozkłady layoutu są chyba jakimś żartem.
Słyszałem o wielu płatnych komercyjnych rozkładach ale chciałbym jakieś darmowe rozwiązania znaleźć.

No musiałem się wyżalić.
Jak wy sobie z tym radzicie? Macie takie problemy czy to ja popełniam jakieś błędy?

0

Mam zupełnie inne odczucia. Nie korzystam z żadnego designera. Pożądany wygląd uzyskuje szybko, łatwo i przyjemnie przez kombinację paneli i różnych menadżerów.

0

mnie tez raczej uczyli wszystko pisac z palca. zajmuje wiecej czasu ale przynajmniej mam pelną kontrole nad tym co sie dzieje. moim zdaniem designery sa dobre jak trzeba szybko zrobic cos w miare prosto-wygladającego

0

Też najpierw pisałem z palca ale w ten sposób można uklepać formę która ma mniej niż x obiektów, bo później zaczynają się schody. Nie wyobrażam sobie teraz pisać formy która ma kupę zakładek, tabel, formularzy czy tym podobnych.
Z resztą dokładnie te same problemy miałem pisząc samemu kod, a używałem też różnych layoutów.

Mam nadzieję że nie będzie tutaj krytykowania designerów za to że ułatwiają życie, bo zauważyłem, że sporo ludzi uważa narzędzia typu borlanda za crap, a najczęściej są to ludzie którzy napisali w życiu mniej niż 20k lini kodu.

0

co za różnica czy na formatce chcesz mieć 2, 3 czy też n-> ∞ elementów, przecież nie wrzucasz ich chyba wszystkich jako elementy klasy...jeśli tak, no to sorry...trzeba troszeczke wiecej pracy żeby ładnie to wyglądało, a javove designery rzeczywiście ssą...zainstaluj sobie jigloo jak nie chce ci się pisać, tylko potem żeby odnaleźć się w tym kodzie to mapy potrzeba...

a 20k (no może 5k) linii, to ma u mnie (niestety )w aktualnym projekcie co 3 klasa...co by nie było że jestem casualem

0

Myślę, że napisałem w życiu z 1000 razy więcej kodu niż Ty. Graficznych designerów nie polubiłem (między innymi z ich powodu używam Delphi bardzo sporadycznie), rozmieszczanie przy pomocy menadżerów nie sprawia mi żadnych kłopotów i nie zajmuje dużo czasu.

0

Pisałem, że próbowałem z różnymi ilościami paneli.

bo napisał(a)

Myślę, że napisałem w życiu z 1000 razy więcej kodu niż Ty. Graficznych designerów nie polubiłem (między innymi z ich powodu używam Delphi bardzo sporadycznie), rozmieszczanie przy pomocy menadżerów nie sprawia mi żadnych kłopotów i nie zajmuje dużo czasu.

Skąd wiesz ile kodu napisałem?
I o co chodzi z managerami? czym się różni manager od designera?
Chciałem usłyszeć tylko kilka porad, nie ma z czego robić flejma.

0
Grzybu napisał(a)

Po prostu dzieje się coś takiego że ruszam jedne button a w tym czasie 15 innych elementów zmienia rozmiary i położenia.

Zgadza się. Po prostu javowe układacze mają założenie dynamicznego rozkładu, co pozwala na o wiele łatwiejsze zaprojektowanie formatek mających dwie podstawowe cechy:

  1. zmiany wielkości okna bez zmiany funkcjonalności jego zawartości,
  2. zmiany wielkości czcionek bez wpływu na pogorszenie funkcjonalności formatki.
    Łatwość użycia narzędzi Borlanda pod Windows polegała na założeniu niezmiennego rozmiaru panela oraz niezmiennego rozmiaru czcionek (lub stałych gradacji ich wielkości).
    Zaprojektowanie w javie jednej formatki, która będzie funkcjonalna zarówno gdy użyta czcionka będzie miała 8 punktów oraz 60 punktów jest bardzo łatwe. Podobnie gdy zechcemy rozciągnąć okno dialogowe na cały ekran. W narzędziach Borlanda (oraz Microsoftu również) zrobienie tego samego bez napisania ani linijki dodatkowego kodu albo nie jest możliwe, albo jest to koszmar.

Zauważ ile programów w C++ po zmianie wielkości elementów interfejsu graficznego (i czcionek) jest po prostu nieużywalnych - jest cała masa takich programów (szczególnie shareware), w tym sam system Windows.
W Swingu nie ma tego problemu - ale nic za darmo - kosztem skomplikowania układania formatki i uzależniania pozycji i wielkości jednych elementów od innych.
Tworząc formatkę musisz zawsze rugować swoje wszelkie założenia co do jej wielkości oraz wielkości użytych czcionek.

Macie takie problemy czy to ja popełniam jakieś błędy?

Jeżeli chciałbyś podobną funkcjonalność jak w narzędziach Borlanda czy MS, to musiałbyś każdorazowo wyłączać wszelkie menedżery rozkładu. Ale wtedy i tak poniesiesz dodatkowy nakład pracy mimo identycznej funkcjonalności (jak w narzędziach do których się odwołujesz) ponieważ w Swingu rozkład absolutny jest raczej wyjątkiem niż regułą.

ps. Widzę, że jest jakiś problem nazewniczy. Designer, to program pozwalający na ułożenie elementów GUI i zapisanie ich jako zasoby lub kod. Manager rozkładu, to dynamiczny kod zarządzający wzajemnym położeniem tych elementów w aplikacji. W przypadku starszych narzędzi dla Windows designerem był np. Visual Basic czy Delphi (część która pozwalała tworzyć formatki), a ich "manager rozkładu" sprowadzał się do jednorazowego przeliczania rzeczywistego położenia elementów w relatywnym układzie współrzędnych komponentu rodzica (kontenera).
W Swingu designer może być elementem IDE lub oddzielną aplikacją, a wygenerowane informacje o formatce stają się kodem w javie (a nie żadnymi specjalnymi zasobami). Natomiast managery rozkładu to klasy obiektów pomocniczych, które są jakby regułą/klejem między wygenerowanymi elementami.
Możesz na przykład w Swingu stworzyć panel, którego bok będzie pierwiastkiem długości boku rodzica i będzie znajdował się zawsze w przeciwnym rogu rodzica niż róg/krawędź rodzica najbliższy brzegu ekranu. Po napisaniu takiego managera będziesz mógł używać go potem w dowolnym designerze Swinga do dowolnej aplikacji obok innych standardowych managerów nie pisząc już ani linijki kodu więcej.

0

Gdzie Ty widzisz flejma? Zadałeś pytanie

Macie takie problemy czy to ja popełniam jakieś błędy?
i dostałeś odpowiedź: skoro inni nie mają problemów, to znaczy że Ty popełniasz błędy.
Nie wiem ile kodu napisałeś, podobnie jak nie wiem ile zrobiłeś od urodzenia wdechów. Ale mogę z absolutną pewnością twierdzić że ja zrobiłem ich więcej.

0

Troche mnie tu dziwi podejscie do pisania GUI reprezentowane przez niektore osoby.
Osobiscie watpie, zeby klepanie z palca rozbudowanych GUI mialo wiekszy sens, jesli mozna to zrobic duzo szybciej i prosciej za pomoca metody drag & drop w odpowiednim builderze. Kombinowanie z panelami i managerami rozkladu do mnie nie przemawia. To jak wynajdywanie drugi raz kola. Warto umiec zrobic podobny efekt z palca, ale jesli ma sie do dyspozycji w miare dobre narzedzie automatyzujace ten proces, to dlaczego z niego nie skorzystac?

Argument docelowo wiekszej kontroli nad tym co sie robi tez jest moim zdaniem z d**y :-) Rozmieszczenie, nazewnictwo i funkcjonalnosc robi sie samemu albo piszac cialo metody albo formatce wklepujac pozadane nazwy. Jedyne co jest narzucane to odgorny wzorzec ale to jest zaimplementowane wewnatrz bibliotek konkretnego buildera i tak na prawde wiedza o tym nie jest do niczego potrzebna.

Grzybu: Tez mam nie raz ten problem. Czesto wystarczy po prostu zmienic pozycje innego elementu wzgledem ktorego jest pozycjonowany docelowy element. A na koncu wszystko razem wyrownac. Troche kombinacji ale idzie to zrobic :-)

0

Jedyną rozsądną (w miarę) alternatywą dla "klepania z palca" co swoją drogą jest pewnego rodzaju sztuką, są porządne wtyczki - buildery do eclipse, które generują w miarę ludzki kod.

Prostą aplikację pisaną dla picu, a owszem można pojechać z buildera, typu netbeans, który wyzionie z siebie kod, że idzie się porzygać. Ale w jakiś konkretnych projektach to porażka, spróbuj się doszukać coś w takim kodzie, wymagania dotyczące gui także się zmieniają, owszem można znowu wszystko pojechać od początku, ale to jest strata czasu i wtedy dobrze napisany ręczny kod się odwdzięczy.

Im bardziej rozbudowane gui, tym gorzej jeśli zrobione z designera.
Znasz dobrze kilka podstawowych zarządców układu i nie masz żadnych problemów, że się coś rozjedzie, to nie css i wojna przeglądarek.

0
GhostDog napisał(a)

Prostą aplikację pisaną dla picu, a owszem można pojechać z buildera, typu netbeans, który wyzionie z siebie kod, że idzie się porzygać.

Po co Ci "porządny kod" do czegoś czego i tak nie użyjesz? W takim matisse (netbeans) niemal cały kod sprowadza się do pojedynczej metody prywatnej (której i tak nie ruszasz) oraz pól, które sam sobie możesz nazwać. Jedyny kawałek wygenerowanego kodu, który musi współpracować z tym napisanym z palca (albo i nie) to listenery, których generowanie możesz sobie skonfigurować na 3 sposoby (jedna podklasa + jedna metoda, jedna podklasa + osobne metody, osobne podklasy anonimowe). Wyczerpane są praktycznie wszystkie potrzeby w tej dziedzinie.
A poza tym kod wygenerowany przez takie narzędzie jest całkiem przyzwoity, nawalają jedynie czasem wcięcia w zbyt zagnieżdżonych wywołaniach, ale to normalne bo nawet pisząc podobny kod ręcznie miałoby się ciężki zgryz jak takie coś czytelnie zapisać.

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