Java GUI-frameworks. Wat te kiezen? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Er zijn nogal wat gui-frameworks voor java, maar wat wordt erkend als het voorkeursframework van vandaag?

Het volgende is mijn begrip van de verschillende kaders, corrigeer me als ik het mis heb. Dit is een zeer los gedefinieerde reeks vragen, maar ik denk nog steeds dat het waardevol is voor iedereen die denkt aan het maken van rijke gui-applicaties.


AWT

Is de basis van swing, het presteert goed, maar mist geavanceerde componenten. Als u van plan bent om rijke toepassingen te maken, is AWT waarschijnlijk niet de juiste keuze. Voor kleinere gui-toepassingen is echter geen uitgebreide gebruikersinterface vereist. Dit zou perfect kunnen passen omdat het een beproefd raamwerk is.


Swing

Gebaseerd op AWT zoals eerder vermeld. In de kinderschoenen werd het beschouwd als traag en buggy en zorgde ervoor dat IBM SWT voor Eclipse creëerde. Met Java 5 (of 6?) werd Swing echter het raamwerk bij uitstek voor het bouwen van nieuwe applicaties. Swing heeft veel rijke componenten, maar ontbreekt op sommige gebieden nog steeds. Een voorbeeld is dat er geen volledig uitgeruste TreeTable-component is die kan sorteren en filteren/zoeken.


SWT

Gecreëerd door IBM voor Eclipse, leken ze destijds te denken dat Swing niet geschikt was voor Eclipse. Op zichzelf is het vrij laag en het gebruikt de native widgets van het platform via JNI. Het is helemaal niet gerelateerd aan Swing en AWT. Hun API is echter wat onhandig en niet intuïtief. Ze hebben wel een aantal geavanceerde componenten zoals een TreeTable. (maar ik denk niet dat ze out-of-the-box sorteren en filteren ondersteunen). SWT gebruikt enkele native bindingen (via JNI?) en de tirade op internet is dat dit raamwerk niet zou moeten worden gebruikt in de projecten van vandaag. (waarom niet?)


SwingX

Gebaseerd op Swing en het is haar missie om rijke componenten voor swing te creëren. Nog in ontwikkeling. (hoewel niet erg actief.) Heb een hele mooie set componenten, zoals bijvoorbeeld TreeTable. Maar de TreeTable ondersteunt voor zover ik weet geen filteren en sorteren. Het ondersteunt echter wel zoeken met markering.

Merk op dat SwingX componenten (AFAIU) zijn die extensies of . zijn
composities van bestaande Swing-componenten


JGoodies

Een raamwerk waar ik niets van weet… Wat zijn de sterke en zwakke punten? Wat onderscheidt Jgoodies van de rest?

JGoodies OTOH gaat over PLAF’s en lay-outs.


JavaFX

Het nieuwste vlaggenschip van Java/Oracle. veelbelovend om de facto standaard te zijn bij het ontwikkelen van rijke desktop- of webapplicaties.


Apache-draaipunt

Het geeft de gebruikersinterface weer met Java2D, waardoor de impact van (IMO, opgeblazen) erfenissen van Swing en AWT wordt geminimaliseerd. (@Augustus Thoo)

De nadruk lijkt te liggen op RIA (Rich Internet Applications), maar het lijkt erop dat het ook kan worden toegepast op desktop-applicaties. En als persoonlijke opmerking: Ziet er erg interessant uit! Ik vind het vooral leuk dat het een apache-project is.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq .html


Qt Jambi

Een Java-wrapper voor de native qt-bibliotheek die is geschreven in c/c++. Zeer krachtig, veel gebruikt en geaccepteerd. Heeft veel GUI-componenten en een eenvoudig te gebruiken API.

http://qt-jambi.org/


Dus, om te proberen een beetje samen te vatten van wat ik vraag:

Stel dat ik vandaag een desktoptoepassing in Java wilde maken met veel geavanceerde componenten, wat moet ik kiezen? En waarom?

Welke van deze kaders moet worden erkend als verouderd en welke moet worden erkend als de kaders van de verre toekomst?

Wat is het huidige de-facto-standaard framework en welke tools gebruik je om Java gui-applicaties te maken?


Misschien heb ik er spijt van dat ik dit vraag, maar ik probeer het toch niet:

C#/.Net zou een zeer goede set gebruiksvriendelijke componenten hebben die in alle mogelijke richtingen kunnen worden gebogen. En na tot op zekere hoogte verschillende Java-frameworks te hebben onderzocht, kan ik niet hetzelfde zeggen over Java. Waarom is dit? Waarom heeft java (de meest gebruikte programmeertaal ter wereld) niet dezelfde set GUI-componenten?

Is het gewoon dat Java hun gui-componenten op een veel lager niveau heeft gebaseerd, en dat het mogelijk is om al deze geavanceerde componenten te schrijven waarnaar ik op zoek ben, maar moet je veel, zo niet al het werk zelf doen?

p>


Antwoord 1, autoriteit 100%

Beslisboom:

  1. Frameworks zoals Qt en SWT hebben native DLL’s nodig. Je moet jezelf dus afvragen: worden alle benodigde platforms ondersteund? Kun je de native DLL’s met je app verpakken?

    Zie hier, hoe dit te doen voor SWT.

    Als u hier een keuze heeft, moet u Qt verkiezen boven SWT. Qt is ontwikkeld door mensen die de gebruikersinterface en de desktop begrijpen, terwijl SWT is ontwikkeld uit noodzaak om Eclipse sneller te maken. Het is meer een prestatiepatch voor Java 1.4 dan een UI-framework. Zonder JFace mis je veel belangrijke UI-componenten of zeer belangrijke functies van UI-componenten (zoals filteren op tabellen).

    Als SWT een functie mist die je nodig hebt, staat het framework enigszins vijandig tegenover uitbreiding ervan. Je kunt er bijvoorbeeld geen klasse in uitbreiden (de klassen zijn niet definitief, ze geven alleen uitzonderingen wanneer het pakket van this.getClass()niet org.eclipse.swten je kunt geen nieuwe klassen aan dat pakket toevoegen omdat het is ondertekend).

  2. Als u een native, pure Java-oplossing nodig heeft, blijft de rest over. Laten we beginnen met AWT, Swing, SwingX – de Swing-manier.

    AWT is verouderd. Swing is verouderd (misschien minder, maar er is de afgelopen 10 jaar niet veel aan Swing gedaan). Je zou kunnen stellen dat Swing in het begin goed was, maar we weten allemaal dat code rot. En dat geldt vooral voor UI’s van vandaag.

    Dan blijft u bij SwingX. Na een langere periode van langzame vooruitgang, ontwikkeling is weer opgepakt. Het grote nadeel van Swing is dat het vasthoudt aan een aantal oude ideeën die 15 jaar geleden nogal bloederig waren, maar die tegenwoordig “onhandig” aanvoelen. De tabelweergaven ondersteunen bijvoorbeeld wel filteren en sorteren, maar u moet dit nog configureren. Je zult veel boiler plate-code moeten schrijven om een fatsoenlijke gebruikersinterface te krijgen die modern aanvoelt.

    Een ander zwak punt is thema’s. Vanaf vandaag zijn er veel thema’s rond. Kijk hier voor een top 10. Maar sommige zijn traag, sommige zijn buggy, sommige zijn onvolledig. Ik haat het als ik een gebruikersinterface schrijf en gebruikers klagen dat iets niet werkt voor hen omdat ze een vreemd thema hebben gekozen.

  3. JGoodies is een andere laag bovenop Swing, zoals SwingX. Het probeert Swing prettiger in het gebruik te maken. De website ziet er geweldig uit. Laten we eens kijken naar de tutorial … hm … nog steeds aan het zoeken … wacht even. Het lijkt erop dat er helemaal geen documentatie op de website staat. Google komt te hulp. Nee, helemaal geen nuttige tutorials.

    Ik heb geen vertrouwen in een UI-framework dat zo hard zijn best doet om de documentatie voor potentiële nieuwe fans te verbergen. Dat betekent niet dat JGoodies slecht is; Ik kon er gewoon niets goeds over vinden, maar dat het er mooi uitziet.

  4. JavaFX. Geweldig, stijlvol. Ondersteuning is er, maar ik heb het gevoel dat het meer een glimmend stuk speelgoed is dan een serieus UI-framework. Dit gevoel komt voort uit het ontbreken van complexe UI-componenten zoals boomtabellen. Er is een webkit-gebaseerde component om HTML weer te geven.

    Toen het werd geïntroduceerd, was mijn eerste gedachte ‘vijf jaar te laat’. Als je doel is een leuke app voor telefoons of websites, goed. Als uw doel een professionele desktoptoepassing is, zorg er dan voor dat deze levert wat u nodig heeft.

  5. Spil. De eerste keer dat ik erover hoorde. Het is eigenlijk een nieuw UI-framework op basis van Java2D. Dus ik heb het gisteren geprobeerd. Geen Swing, slechts een klein beetje AWT (new Font(...)).

    Mijn eerste indruk was een goede. Er is een uitgebreide documentatie die u op weg helpt. De meeste voorbeelden worden geleverd met live demo’s(Opmerking: u moet Java hebben ingeschakeld in uw webbrowser; dit is een veiligheidsrisico) op de webpagina, zodat u de code en de resulterende applicatie naast elkaar kunt zien.

    Mijn ervaring is dat er meer aandacht wordt besteed aan code dan aan documentatie. Door naar de Pivot-documenten te kijken, moet er veel moeite zijn gestoken in de code. Merk op dat er momenteel een bug is waardoor sommige voorbeelden niet werken (PIVOT-858) in uw browser.

    Mijn tweede indruk van Pivot is dat het gemakkelijk te gebruiken is. Als ik tegen een probleem aanliep, kon ik het meestal snel oplossen door naar een voorbeeld te kijken. Ik mis echter een referentie van alle stijlen die elk onderdeel ondersteunt.

    Net als bij JavaFX ontbreken enkele componenten van een hoger niveau, zoals een boomtabelcomponent (PIVOT -306). Ik heb lui laden niet geprobeerd met de tabelweergave. Mijn indruk is dat als het onderliggende model lazy loading gebruikt, dat voldoende is.

    Veelbelovend. Als je kunt, probeer het dan eens.


Antwoord 2, autoriteit 15%

SWTis op zichzelf vrij laagdrempelig en gebruikt de native widgets van het platform via JNI. Het is helemaal niet gerelateerd aan Swing en AWT. De Eclipse IDEen alle op Eclipse gebaseerde Rich Client-applicaties, zoals de Vuze BitTorrent-client, zijn gebouwd met SWT. Als u Eclipse-plug-ins ontwikkelt, gebruikt u meestal SWT.
Ik ontwikkel nu al bijna 5 jaar op Eclipse gebaseerde applicaties en plug-ins, dus ik ben duidelijk bevooroordeeld. Ik heb echter ook uitgebreide ervaring in het werken met SWT en de JFace UI-toolkit, die er bovenop gebouwd. Ik heb JFace als zeer rijk en krachtig ervaren; in sommige gevallen kan het zelfs de belangrijkste reden zijn om voor SWT te kiezen. Het stelt je in staat om vrij snel een werkende gebruikersinterface op te bouwen, zolang het maar IDE-achtig is (met tabellen, bomen, native controls, enz.). Natuurlijk kun je ook je aangepaste bedieningselementen integreren, maar dat kost wat extra moeite.


Antwoord 3, autoriteit 11%

Ik zou een ander framework willen voorstellen: Apache Pivot http://pivot.apache.org/.

Ik heb het kort geprobeerd en was onder de indruk van wat het kan bieden als een RIA-framework (Rich Internet Application) alaFlash.

Het geeft de gebruikersinterface weer met Java2D, waardoor de impact van (IMO, opgeblazen) erfenissen van Swing en AWT wordt geminimaliseerd.


Antwoord 4, autoriteit 11%

Swing + SwingX + Miglayoutis mijn favoriete combinatie. Miglayout is zo veel eenvoudiger dan Swings 200 verschillende lay-outmanagers en veel krachtiger zag. Het biedt u ook de mogelijkheid om uw lay-outs te “debuggen”, wat vooral handig is bij het maken van complexe lay-outs.


Antwoord 5, autoriteit 10%

Een andere optie is om Qt Jambite gebruiken. Het heeft bijna alle grootsheid van Qt (veel componenten, goede documentatie, gemakkelijk te gebruiken), zonder het gedoe van C++. Ik gebruikte het 3-4 jaar geleden voor een klein project, zelfs toen was het bijna volwassen.

Misschien wil je de discussie over Swing vs. Qt hierbekijken.


Antwoord 6, autoriteit 6%

Mijn persoonlijke mening: Ga voor Swing samen met het NetBeans platform.

Als je geavanceerde componenten nodig hebt (meer dan NetBeans biedt), kun je SwingX probleemloos (of JGoodies) integreren, aangezien het NetBeans-platform volledig op Swing is gebaseerd.

Ik zou geen grote desktop-applicatie starten (of een die groot gaat worden) zonder een goed platform dat is gebouwd op het onderliggende UI-framework.

De andere optie is SWT samen met de Eclipse RCP, maar het is moeilijker (maar niet onmogelijk) om “pure” Swing-componenten in zo’n applicatie te integreren.

De leercurve is een beetje steil voor het NetBeans-platform (hoewel ik denk dat dat ook geldt voor Eclipse), maar er zijn enkele goede boeken die ik ten zeerste zou aanbevelen.


Antwoord 7, autoriteit 4%

je bent vergeten voor Java Desktop Aplication gebaseerd op JSR296 als ingebouwd Swing Framework in NetBeans

exclusief AWT en JavaFX zijn al je beschreven frameworks gebaseerd op Swing, als je begint met Swing, dan zou je (duidelijk) begrip hebben voor al deze Swing’s (Based Frameworks)

ATW, SWT (Eclipse), Java Desktop-applicatie (Netbeans), SwingX, JGoodies

alle frameworks (ik weet niet meer over JGoodies) incl. JavaFX heeft niet lang vooruitgang geboekt, veel op Swing gebaseerde frameworks zijn gestopt, zo niet dan zonder de nieuwste versie

alleen mijn mening – de beste van hen is SwingX, maar vereist de diepste kennis over Swing,

Look and Feelvoor op Swing gebaseerde frameworks


Antwoord 8, autoriteit 4%

Ik ben heel blij met Swing voor de desktop-applicaties waar ik bij betrokken ben geweest. Ik deel echter uw mening over Swing die geen geavanceerde componenten biedt. Wat ik in deze gevallen heb gedaan, is voor JIDE gaan. Het is niet gratis, maar ook niet zo duur en het geeft je veel meer tools onder je riem. In het bijzonder bieden ze een filterbare TreeTable.


Antwoord 9, autoriteit 4%

Ik zou voor Swing gaan. Voor lay-out zou ik JGoodies-vormlay-out gebruiken. Het is de moeite waard om het witboek over de formulierlay-out hier te bestuderen – http://www.jgoodies.com/freeware/ formulieren/

Ook als je een enorme desktopapplicatie gaat ontwikkelen, heb je zeker een framework nodig. Anderen hebben gewezen op het netbeans-framework. Ik vond het niet zo leuk, dus schreef ik een nieuwe die we nu in mijn bedrijf gebruiken. Ik heb het op sourceforge gezet, maar vond niet de tijd om het veel te documenteren. Hier is de link om door de code te bladeren:

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

De showcase zou u moeten laten zien hoe u eenvoudig kunt inloggen.

Laat het me weten als je er vragen over hebt, ik kan je helpen.

Other episodes