Istnieje wiele frameworków GUI dla java, ale co uznaje się za dzisiejszy wybór ram?
Oto moje rozumienie różnych ram, proszę mnie poprawić, jeśli się mylę. Jest to bardzo luźno zdefiniowany zestaw pytań, ale nadal uważam, że jest cenny dla każdego, kto myśli o tworzeniu bogatych aplikacji GUI.
Jest to podstawa swingu, działa dobrze, ale brakuje mu zaawansowanych komponentów. Jeśli zamierzasz tworzyć bogate aplikacje, AWT prawdopodobnie nie jest dobrym rozwiązaniem. Jednak w przypadku mniejszych aplikacji GUI, które nie wymagają bogatych interfejsów użytkownika. Może to idealnie pasować, ponieważ jest to wypróbowana i sprawdzona platforma.
Na podstawie AWT, jak stwierdzono wcześniej. W początkowym okresie był uważany za powolny i błędny i spowodował, że IBM stworzył SWT dla Eclipse. Jednak w Javie 5 (lub 6?) Swing stał się preferowanym narzędziem do tworzenia nowych aplikacji. Huśtawka ma wiele bogatych komponentów, ale wciąż brakuje jej w niektórych obszarach. Jednym z przykładów jest to, że nie ma w pełni funkcjonalnego komponentu TreeTable, który mógłby sortować i filtrować / wyszukiwać.
Stworzone przez IBM dla Eclipse, wydawało im się, że Swing nie był wtedy odpowiedni dla Eclipse. Sam w sobie jest dość niskim poziomem i korzysta z natywnych widgetów platformy za pośrednictwem JNI. Nie ma to wcale związku z Swingiem i AWT. Ich interfejs API jest jednak nieco niezręczny i nie intuicyjny. Mają pewne zaawansowane komponenty, takie jak TreeTable. (ale nie sądzę, że obsługują sortowanie i filtrowanie po wyjęciu z pudełka). SWT korzysta z niektórych rodzimych powiązań (przez JNI?), A w Internecie istnieje rant, że nie należy używać tych ram w dzisiejszych projektach. (Dlaczego nie?)
Oparty na Swing, a jego misją jest tworzenie bogatych komponentów do swing. Wciąż w fazie rozwoju. (niezbyt aktywne). Mają bardzo ładny zestaw komponentów, takich jak na przykład TreeTable. Ale TreeTable nie obsługuje filtrowania i sortowania, o ile wiem. Obsługuje jednak wyszukiwanie z podświetlaniem.
Zauważ, że SwingX to komponenty (AFAIU), które są rozszerzeniami lub kompozycjami istniejących komponentów Swing
JGoodies
Ramy, o których nic nie wiem ... Jakie są mocne i słabe strony? Jaki zestaw Jgoodies oprócz reszty?
JGoodies OTOH dotyczy PLAF i układów.
Najnowszy flagowy produkt Java / Oracle. obiecując, że stanie się faktycznym standardem w tworzeniu bogatych aplikacji komputerowych lub internetowych.
Renderuje interfejs użytkownika za pomocą Java2D, minimalizując w ten sposób wpływ (IMO, wzdęty) dziedzictwo Swinga i AWT. (@Augustus Thoo)
Wydaje się, że koncentruje się głównie na RIA (bogate aplikacje internetowe), ale wydaje się, że można go również zastosować do aplikacji komputerowych. I jako osobisty komentarz, wygląda bardzo interesująco! Szczególnie podoba mi się to, że jest to projekt apache.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
Opakowanie java do natywnej biblioteki qt napisanej w c / c ++. Bardzo potężny, szeroko stosowany i akceptowany. Ma wiele komponentów GUI i łatwy w użyciu interfejs API.
Więc, aby podsumować trochę tego, o co proszę:
Powiedzmy, że chciałem dziś stworzyć aplikację komputerową w Javie, która zawiera wiele zaawansowanych komponentów, co powinienem wybrać? I dlaczego?
Który z tych ram należy uznać za przestarzały, a który jako ramy odległej przyszłości?
Co to jest dzisiejszy de facto standardowy framework i jakich narzędzi używasz do tworzenia aplikacji GUI Java?
Żałuję, że o to pytam, ale i tak spróbuję:
Mówi się, że C # /. Net ma bardzo dobry zestaw łatwych w użyciu komponentów, które można wyginać w każdym możliwym kierunku. Po zbadaniu różnych frameworków Java do pewnego stopnia nie mogę powiedzieć tego samego o Javie. Dlaczego to? Dlaczego java (który jest najczęściej używanym językiem programowania na świecie) nie ma tego samego zestawu komponentów GUI?
Czy to po prostu, że Java oparła komponenty GUI na znacznie niższym poziomie i można napisać te wszystkie zaawansowane komponenty, których szukam, ale sam musisz wykonać wiele, jeśli nie całą pracę?
Odpowiedzi:
Drzewo decyzyjne:
Struktury takie jak Qt i SWT wymagają natywnych bibliotek DLL. Musisz więc zadać sobie pytanie: czy obsługiwane są wszystkie niezbędne platformy? Czy możesz spakować natywne biblioteki DLL za pomocą aplikacji?
Zobacz tutaj, jak to zrobić dla SWT .
Jeśli masz tutaj wybór, powinieneś preferować Qt niż SWT. Qt został opracowany przez ludzi, którzy rozumieją interfejs użytkownika i pulpit, podczas gdy SWT został opracowany z konieczności przyspieszenia Eclipse. To bardziej poprawka wydajności dla Java 1.4 niż struktura interfejsu użytkownika. Bez JFace brakuje wielu głównych składników interfejsu użytkownika lub bardzo ważnych funkcji składników interfejsu użytkownika (takich jak filtrowanie w tabelach).
Jeśli SWT brakuje potrzebnej funkcji, środowisko jest nieco wrogo nastawione do jego rozszerzania. Na przykład nie można rozszerzyć w niej żadnej klasy (klasy nie są końcowe, po prostu rzucają wyjątki, gdy pakiet
this.getClass()
nie jestorg.eclipse.swt
i nie można dodawać nowych klas w tym pakiecie, ponieważ jest podpisany).Jeśli potrzebujesz natywnego, czystego rozwiązania Java, pozostawiasz resztę. Zacznijmy od AWT, Swing, SwingX - sposób Swing.
AWT jest przestarzały. Swing jest przestarzały (może mniej, ale przez ostatnie 10 lat nie wykonano wiele pracy na Swing). Można argumentować, że Swing był dobry na początek, ale wszyscy wiemy, że zgniły kod. Dotyczy to szczególnie dzisiejszych interfejsów użytkownika.
To pozostawia Ci SwingX. Po dłuższym okresie powolnych postępów rozwój ponownie przyspieszył . Główną wadą Swinga jest to, że opiera się on na starych pomysłach, które 15 lat temu bardzo krwawiły, ale które dziś wydają się „niezdarne”. Na przykład widoki tabel obsługują filtrowanie i sortowanie, ale nadal musisz to skonfigurować. Musisz napisać dużo kodu płyty kotła, aby uzyskać przyzwoity interfejs użytkownika, który wydaje się nowoczesny.
Kolejnym słabym obszarem jest temat. Na dzień dzisiejszy istnieje wiele tematów. Zobacz tutaj, aby znaleźć 10 najlepszych . Ale niektóre są powolne, niektóre są błędne, inne są niekompletne. Nienawidzę tego, gdy piszę interfejs użytkownika, a użytkownicy narzekają, że coś dla nich nie działa, ponieważ wybrali dziwny motyw.
JGoodies to kolejna warstwa na Swing, podobnie jak SwingX. Stara się, aby Swing był przyjemniejszy w użyciu. Strona wygląda świetnie. Rzućmy okiem na samouczek ... hm ... wciąż szukam ... poczekaj. Wygląda na to, że na stronie nie ma żadnej dokumentacji. Google na ratunek . Nie, żadnych przydatnych samouczków.
Nie czuję się pewnie z frameworkiem interfejsu użytkownika, który tak bardzo stara się ukryć dokumentację przed potencjalnymi nowymi fanami. To nie znaczy, że JGoodies jest zły; Po prostu nie mogłem znaleźć nic dobrego do powiedzenia na ten temat, ale ładnie to wygląda.
JavaFX. Świetnie, stylowo. Wsparcie jest dostępne, ale uważam, że jest to bardziej błyszcząca zabawka niż poważna platforma interfejsu użytkownika. To uczucie wynika z braku złożonych elementów interfejsu użytkownika, takich jak tabele drzew. Istnieje składnik oparty na pakiecie webkit do wyświetlania HTML .
Kiedy został wprowadzony, moją pierwszą myślą było „pięć lat za późno”. Jeśli Twoim celem jest fajna aplikacja na telefony lub strony internetowe, dobrze. Jeśli Twoim celem jest profesjonalna aplikacja komputerowa, upewnij się, że dostarcza to, czego potrzebujesz.
Sworzeń. Pierwszy raz o tym słyszałem. Zasadniczo jest to nowa platforma interfejsu użytkownika oparta na Java2D. Więc spróbowałem wczoraj. No Swing, tylko odrobina AWT (
new Font(...)
).Moje pierwsze wrażenie było miłe. Istnieje obszerna dokumentacja, która pomaga w rozpoczęciu pracy. Większość przykładów zawiera dema na żywo (uwaga: Java musi być włączona w przeglądarce internetowej; jest to zagrożenie bezpieczeństwa ) na stronie internetowej, aby można było zobaczyć kod i wynikową aplikację obok siebie.
Z mojego doświadczenia wynika, że więcej wysiłku wymaga kod niż dokumentacja. Patrząc na dokumenty Pivot, wiele wysiłku musiało zostać włożone w kod. Zauważ, że obecnie występuje błąd, który uniemożliwia działanie niektórych przykładów ( PIVOT-858 ) w przeglądarce.
Moje drugie wrażenie Pivot jest takie, że jest łatwy w użyciu. Kiedy napotkałem problem, zwykle mogłem go szybko rozwiązać, patrząc na przykład. Brakuje jednak odniesienia do wszystkich stylów obsługiwanych przez każdy komponent.
Podobnie jak w JavaFX, brakuje niektórych komponentów wyższego poziomu, takich jak komponent tabeli drzew ( PIVOT-306 ). Nie próbowałem leniwego ładowania z widokiem tabeli. Mam wrażenie, że jeśli model bazowy używa leniwego ładowania, to wystarczy.
Obiecujący. Jeśli możesz, spróbuj.
źródło
SWT sam w sobie jest dość niskim poziomem i korzysta z natywnych widgetów platformy za pośrednictwem JNI. Nie ma to wcale związku z Swingiem i AWT. Eclipse IDE i wszystkie oparte na Eclipse Rich Client Applications, takie jak klient Vuze BitTorrent , są budowane przy użyciu SWT. Ponadto, jeśli opracowujesz wtyczki Eclipse, zwykle używasz SWT.
Tworzę aplikacje i wtyczki oparte na Eclipse od prawie 5 lat, więc jestem wyraźnie stronniczy. Mam jednak również duże doświadczenie w pracy z SWT i zestawem narzędzi JFace UI, który jest zbudowany na nim. Odkryłem, że JFace jest bardzo bogaty i potężny; w niektórych przypadkach może to być nawet główny powód wyboru SWT. Umożliwia dość szybkie poprawienie działającego interfejsu użytkownika, o ile jest on podobny do IDE (z tabelami, drzewami, natywnymi kontrolkami itp.). Oczywiście możesz również zintegrować niestandardowe elementy sterujące, ale wymaga to dodatkowego wysiłku.
źródło
Chciałbym zasugerować inny framework: Apache Pivot http://pivot.apache.org/ .
Wypróbowałem to krótko i byłem pod wrażeniem tego, co może zaoferować jako środowisko RIA (Rich Internet Application) ala Flash.
Renderuje interfejs użytkownika za pomocą Java2D, minimalizując w ten sposób wpływ (IMO, wzdęty) dziedzictwo Swinga i AWT.
źródło
Swing + SwingX + Miglayout to moja kombinacja. Miglayout jest o wiele prostszy niż Swings postrzegał 200 różnych menedżerów układu i jest znacznie potężniejszy. Zapewnia również możliwość „debugowania” układów, co jest szczególnie przydatne podczas tworzenia złożonych układów.
źródło
Inną opcją jest użycie Qt Jambi . Ma prawie całą wielkość Qt (wiele komponentów, dobra dokumentacja, łatwa w użyciu), bez kłopotów z C ++. Użyłem go 3-4 lata temu do małego projektu, nawet wtedy był już prawie dojrzały.
Może chcesz zobaczyć dyskusję o Swing vs Qt tutaj .
źródło
Moja osobista opinia: wybierz Swing razem z platformą NetBeans.
Jeśli potrzebujesz zaawansowanych komponentów (więcej niż oferuje NetBeans), możesz łatwo zintegrować SwingX bez problemów (lub JGoodies), ponieważ platforma NetBeans jest całkowicie oparta na Swing.
Nie uruchomiłbym dużej aplikacji komputerowej (lub takiej, która będzie duża) bez dobrej platformy opartej na podstawowej strukturze interfejsu użytkownika.
Inną opcją jest SWT wraz z Eclipse RCP, ale trudniej (choć nie jest to niemożliwe) zintegrować „czyste” komponenty Swing z taką aplikacją.
Krzywa uczenia się jest nieco stroma dla platformy NetBeans (choć myślę, że dotyczy to również Eclipse), ale jest kilka dobrych książek, wokół których bardzo polecam.
źródło
zapomniałeś aplikacji Java Desktop Aplication opartej na JSR296 jako wbudowanej Swing Framework w NetBeans
wyłączając AWT i JavaFX, wszystkie opisane frameworki oparte są na Swing, jeśli zaczniesz od Swinga, zrozumiesz (wyraźnie) dla wszystkich tych Swingów (oparte na frameworku)
ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies
wszystkie tam frameworki (nie wiem nic więcej o JGoodies), w tym. JavaFX od dawna nie odnotowuje żadnych postępów, wiele frameworków Swinga jest zatrzymywanych, jeśli nie bez najnowszej wersji
tylko mój pogląd - najlepszy z nich to SwingX, ale wymagał najgłębszej wiedzy o Swing,
Szukaj i zobacz frameworki Swing
źródło
with same progress
w SWT, SwingX, nowy właściciel, nowi manierByłem całkiem zadowolony ze Swinga dla aplikacji komputerowych, w które byłem zaangażowany. Podzielam jednak twój pogląd na to, że Swing nie oferuje zaawansowanych komponentów. W tych przypadkach wybrałem JIDE. To nie jest darmowe, ale też nie tak drogie i daje o wiele więcej narzędzi pod pasem. W szczególności oferują filtrowalne TreeTable.
źródło
Poszedłbym z Swingiem. Do układu użyłbym układu formularza JGoodies. Warto przestudiować białą księgę na temat układu formularza tutaj - http://www.jgoodies.com/freeware/forms/
Również, jeśli zamierzasz rozpocząć tworzenie ogromnej aplikacji komputerowej, na pewno potrzebujesz frameworka. Inni zwrócili uwagę na strukturę netbeans. Nie podobało mi się to, więc napisałem nowy, którego używamy teraz w mojej firmie. Umieściłem go na sourceforge, ale nie znalazłem czasu, żeby to dużo dokumentować. Oto link do przeglądania kodu:
http://swingobj.svn.sourceforge.net/viewvc/swingobj/
Prezentacja powinna pokazać, jak wykonać proste logowanie.
Daj mi znać, jeśli masz jakieś pytania, w czym mógłbym pomóc.
źródło