Swing vs JavaFx dla aplikacji komputerowych [zamknięte]

195

Mam bardzo duży program, który obecnie używa SWT. Program może być uruchamiany zarówno w systemie Windows, Mac, jak i Linux, i jest to duża aplikacja komputerowa z wieloma elementami. Teraz, gdy SWT jest nieco stary, chciałbym przejść na Swing lub JavaFX. Chciałbym usłyszeć wasze przemyślenia na temat trzech rzeczy.

Moje główne obawy dotyczą tego, co będzie lepsze dla aplikacji graficznego interfejsu użytkownika? (Szukałem w Internecie i wiele osób sugeruje, że JavaFX jest tak samo dobry jak Swing, ale nie widziałem wielu ważnych argumentów poza zwykłymi wojnami o opinię). Musi działać zarówno w systemie Windows, Mac, jak i niektórych popularnych dystrybucjach Linuksa.

  • Co będzie czystsze i łatwiejsze w utrzymaniu?

  • a co szybciej zbudować od zera?

W mojej aplikacji korzystam z metodologii MVC, jeśli jest to pomocne.

Quillion
źródło
23
JavaFX jest dobry, jeśli zaczynasz od zera. Także dlatego, że JavaFX oficjalnie zastępuje Swing jako bibliotekę interfejsu użytkownika Oracle dla Java. To nie znaczy, że Swing się skończył. Oznacza to po prostu, że JavaFX zyska o wiele więcej uwagi w każdym wydaniu. Powiedziawszy to, jest już półtora miliona pytań na ten temat w SO i gdzie indziej w Google.
nico_c
3
stackoverflow.com/questions/10587713/ ... Wspomniałem również o Google. Dużo już tam jest.
nico_c
Ok, więc sugestia naprawdę wydaje się wtedy fx, będę to utrzymywała otwarta, ale chyba zaakceptuję odpowiedź. Dzięki za linki.
Quillion
1
Oto krótkie podsumowanie JavaFX, chociaż dowolny z SWT, Swing lub JavaFX będzie działał w celu stworzenia aplikacji komputerowej.
jewelsea
Nikt o tym nie wspominał, ale JavaFX nie kompiluje się ani nie działa na niektórych architekturach uznanych przez Oracle za „serwery” (np. Solaris), z powodu braku obsługi „jfxrt.jar”.
Malcolm Boekhoff

Odpowiedzi:

155

Co będzie czystsze i łatwiejsze w utrzymaniu?

Wszystkie rzeczy są równe, prawdopodobnie JavaFX - interfejs API jest znacznie bardziej spójny między komponentami. Zależy to jednak znacznie bardziej od sposobu pisania kodu , niż od biblioteki używanej do jego napisania .

A co szybciej zbudować od zera?

Bardzo zależy od tego, co budujesz. Swing ma do dyspozycji więcej komponentów (zarówno firm zewnętrznych, jak i wbudowanych) i nie wszystkie z nich dotarły jeszcze na nowszą platformę JavaFX, więc może być pewne wymyślenie na nowo koła, jeśli potrzebujesz czegoś nieco niestandardowy. Z drugiej strony, jeśli chcesz robić przejścia / animacje / wideo, w FX jest to rząd wielkości.

Inną rzeczą, o której należy pamiętać, jest (być może) wygląd. Jeśli absolutnie musisz mieć domyślny wygląd systemu, JavaFX (obecnie) nie może tego zapewnić. Nie musi być dla mnie zbyt duży (i tak wolę domyślny wygląd efektów), ale wiem, że niektóre zasady wymagają ograniczenia stylów systemowych.

Osobiście widzę JavaFX jako „i najbliższych” biblioteki UI to nie całkiem tam jeszcze (ale więcej niż użytkowej), a Swing jako biblioteki UI borderline-dziedzictwo, które jest w pełni funkcjonalny i obsługiwanym przez chwilę, ale prawdopodobnie nie będzie tyle w nadchodzących latach (i dlatego są szanse, że FX w pewnym momencie ją wyprzedzi).

Michael Berry
źródło
1
Wierzę, że wszystkie te punkty dotyczą również świata .NET, także w świecie graficznego interfejsu użytkownika, gdzie Windows Presentation Foundation to nowoczesne podejście mające na celu zastąpienie starych formularzy Windows Forms, więc teoretycznie jest lepsze pod każdym względem, z wyjątkiem tego, że nie (jeszcze? ale minęły lata) obsługują natywne, wspólne elementy sterujące / wygląd powłoki, których można się spodziewać, takie jak proste okno dialogowe pliku / przeglądarka katalogów / sterowanie widokiem drzewa.
bitoolean
84

Jak twierdzi Oracle, JavaFX jest kolejnym krokiem w strategii bogatych klientów opartych na Javie. W związku z tym polecam w twojej sytuacji:

Co byłoby łatwiejsze i czystsze w utrzymaniu

  • JavaFX wprowadził kilka ulepszeń w stosunku do Swinga, takich jak możliwość oznaczania interfejsów użytkownika za pomocą FXML i edytowania za pomocą CSS. Ma duży potencjał do napisania modułowego, czystego i łatwego w utrzymaniu kodu.

Co byłoby szybsze do zbudowania od zera

  • Zależy to w dużej mierze od twoich umiejętności i używanych narzędzi.
    • W przypadku swing różne IDE oferują narzędzia do szybkiego rozwoju. Najlepsze, co osobiście znalazłem, to narzędzie do tworzenia GUI w NetBeans .
    • JavaFX ma również wsparcie z różnych IDE, choć nie tak dojrzałe, jak wsparcie Swing w tej chwili. Jednak obsługa znaczników w FXML i CSS sprawia, że ​​tworzenie GUI na JavaFX jest intuicyjne.

Obsługa wzorca MVC

  • JavaFX jest bardzo przyjazny dla wzorca MVC i możesz w prosty sposób oddzielić swoją pracę jako: prezentację (FXML, CSS), modele (Java, obiekty domeny) i logikę (Java).
  • IMHO, wsparcie MVC w Swing nie jest zbyt atrakcyjne. Przepływ, który zobaczysz w różnych komponentach, jest niespójny.

Aby uzyskać więcej informacji, zapoznaj się z postem FAQ Oracle dotyczącym JavaFX tutaj.

Yonathan W'Gebriel
źródło
14

Nikt nie wspomniał o tym, ale JavaFX nie kompiluje się ani nie działa na niektórych architekturach uznanych przez Oracle za „serwery” (np. Solaris), z powodu braku obsługi „jfxrt.jar”. Trzymaj się SWT, aż do odwołania.

Malcolm Boekhoff
źródło
13
@Quillion specjalnie prosi o coś do zbudowania aplikacji komputerowej, która „musi działać zarówno w systemie Windows, Mac, jak i niektórych popularnych wersjach systemu Linux”. . Więc chyba nie obchodzi go Solaris.
Tim Büthe,
5

Nie sądzę, aby istniała jakaś prawidłowa odpowiedź na to pytanie, ale radzę trzymać się SWT, chyba że napotkasz poważne ograniczenia, które wymagają tak poważnego przeglądu.

Ponadto SWT jest w rzeczywistości nowszy i bardziej aktywnie utrzymywany niż Swing. (Został pierwotnie opracowany jako zamiennik dla Swinga przy użyciu natywnych komponentów).

Russell Zahniser
źródło
16
SWT nigdy nie miał zastąpić Swinga. Jak to? Swing został dostarczony z Javą od SUN, a SWT działa tylko na 4 lub 5 platformach i pochodzi pierwotnie z IBM i został rozwinięty w Eclispe Foundation. Jeśli w ogóle można powiedzieć: SWT dążyło do zastąpienia AWT.
Angel O'Sphere
0

Rozejrzałbym się w poszukiwaniu elementów (firm trzecich?), Które robią, co chcesz. Musiałem utworzyć niestandardowe komponenty Swing dla widoku planu, w którym można zarezerwować wiele zasobów, a także siatkę podobną do programu Excel, która działa dobrze z nawigacją za pomocą klawiatury i tak dalej. Miałem okropny czas, żeby ładnie działały, ponieważ musiałem zagłębiać się w wiele zawiłości Swinga, ilekroć napotkałem problem. Zachowanie myszy i ostrości oraz wiele innych rzeczy może być bardzo trudnych do uzyskania, szczególnie dla zwykłego użytkownika Swinga. Mam nadzieję, że JavaFX jest nieco bardziej zorientowany na przyszłość i gotowy do pracy po wyjęciu z pudełka.

eriksensei
źródło
0

Na starszych notebookach ze zintegrowaną aplikacją wideo Swing uruchamia się i działa znacznie szybciej niż aplikacja JavaFX. Jeśli chodzi o programowanie, polecam przejście na Scala - porównywalna aplikacja Scala Swing zawiera 2..3 razy mniej kodu niż Java. Jeśli chodzi o Swing vs SWT: Netbeans GUI jest znacznie szybszy niż Eclipse ...

użytkownik2053898
źródło
Scala Swing jest dobre wspominając
remis