it-swarm.it

Quadri GUI Java. Cosa scegliere? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Ci sono un sacco di quadri di gui là fuori per Java, ma ciò che è riconosciuto come quadro di riferimento di oggi?

Quanto segue è la mia comprensione dei diversi quadri, per favore correggimi se sbagli. Questo è un insieme di domande molto vagamente definito, ma continuo a ritenerlo valido per chiunque pensi di creare ricche applicazioni GUI.


AWT

È il vero fondamento dello swing, funziona bene ma manca di componenti avanzati. Se intendi creare applicazioni ricche, AWT probabilmente non è la strada da percorrere. Tuttavia, per le applicazioni GUI più piccole che non richiedono interfacce utente avanzate. Questo potrebbe adattarsi perfettamente in quanto è un framework provato e provato.


Swing

Basato su AWT come precedentemente affermato. Nella sua infanzia è stato considerato lento e buggy e ha portato IBM a creare SWT per Eclipse. Tuttavia con Java 5 (o 6?) Swing è diventato il quadro di riferimento per la creazione di nuove applicazioni. Swing ha molti componenti ricchi ma in alcune aree mancano ancora. Un esempio è che non esiste un componente TreeTable completo che possa fare ordinamento e filtraggio/ricerca.


SWT

Creati da IBM per Eclipse, sembravano pensare che Swing non fosse adatto per Eclipse in quel momento. Di per sé è piuttosto di basso livello e utilizza i widget nativi della piattaforma tramite JNI. Non è affatto collegato a Swing e AWT. La loro API è comunque alquanto goffa e non intuitiva. Hanno alcuni componenti avanzati come un TreeTable. (ma non credo che supportino l'ordinamento e il filtraggio fuori dalla scatola). SWT utilizza alcuni binding nativi (attraverso JNI?) E il rant su internet è che questo framework non dovrebbe essere usato nei progetti di oggi. (perchè no?)


SwingX

Basato su Swing e la sua missione è creare componenti ricchi per lo swing. Ancora in fase di sviluppo. (non molto attivo però.) Hanno un insieme di componenti molto piacevole, come ad esempio TreeTable. Ma TreeTable non supporta il filtraggio e l'ordinamento per quanto ne so. Tuttavia supporta la ricerca con l'evidenziazione.

Si noti che SwingX è componenti (AFAIU) che sono estensioni o composizioni di componenti Swing esistenti


JGoodies

Un quadro di cui non so nulla ... Quali sono i suoi punti di forza e di debolezza? Che cosa fanno i Jgoodie a parte gli altri?

JGoodies OTOH parla di PLAF e layout.


JavaFX

L'ultimo fiore all'occhiello di Java/Oracle. promettendo di essere lo standard di fatto nello sviluppo di ricche applicazioni desktop o web.


Apache Pivot

Rende l'interfaccia utente utilizzando Java2D, riducendo così al minimo l'impatto di eredità (IMO, gonfio) di Swing e AWT. (@Augustus Thoo)

L'attenzione principale sembra essere su RIA (Rich Internet Applications), ma sembra che possa essere applicata anche alle applicazioni desktop. E come commento personale, sembra molto interessante! Soprattutto mi piace che sia un progetto Apache.

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


Qt Jambi

Un wrapper Java alla libreria qt nativa che è scritta in c/c ++. Molto potente, ampiamente usato e accettato. Ha un sacco di componenti GUI e un'API facile da usare.

http://qt-jambi.org/


Quindi, per cercare di riassumere un po 'di ciò che sto chiedendo:

Diciamo che volevo creare un'applicazione desktop oggi in Java che coinvolge un sacco di componenti avanzati, cosa dovrei scegliere? E perché?

Quale di questi quadri dovrebbe essere riconosciuto come deprecato e quale dovrebbe essere riconosciuto come il quadro di un lontano futuro?

Qual è il framework standard di fatto di oggi e quali strumenti utilizzate per creare applicazioni Java GUI?


Potrei pentirmi di chiederlo, ma comunque provarlo male:

C # /. Net si dice che abbia un ottimo set di componenti facili da usare che possono essere flessi in ogni direzione possibile. E dopo aver studiato diversi framework Java in qualche modo non riesco a dire lo stesso su Java. Perchè è questo? Perché non Java (che è il linguaggio di programmazione più utilizzato al mondo) ha lo stesso set di componenti della GUI?

È solo che Java ha basato le sue componenti di GUi ad un livello molto più basso, ed è possibile scrivere tutti questi componenti avanzati che sto cercando, ma devi fare molto se non tutto il lavoro da solo?

229
netbrain

Albero decisionale:

  1. Framework come Qt e SWT richiedono DLL native. Quindi devi chiederti: sono supportate tutte le piattaforme necessarie? Puoi confezionare le DLL native con la tua app?

    Vedi qui, come farlo per SWT .

    Se hai una scelta qui, dovresti preferire Qt a SWT. Qt è stato sviluppato da persone che capiscono l'interfaccia utente e il desktop mentre SWT è stato sviluppato per necessità di rendere Eclipse più veloce. È più una patch per le prestazioni per Java 1.4 che un framework UI. Senza JFace, ti mancano molti importanti componenti dell'interfaccia utente o funzionalità molto importanti dei componenti dell'interfaccia utente (come il filtro sulle tabelle).

    Se a SWT manca una funzionalità di cui hai bisogno, il framework è in qualche modo ostile ad estenderlo. Ad esempio, non puoi estendere alcuna classe in essa (le classi non sono definitive, generano solo eccezioni quando il pacchetto di this.getClass() non è org.Eclipse.swt e non puoi aggiungere nuove classi in quel pacchetto perché è firmato).

  2. Se hai bisogno di una soluzione Java pura e nativa, questo ti lascia con il resto. Iniziamo con AWT, Swing, SwingX - la modalità Swing.

    AWT è obsoleto. Swing è obsoleto (forse meno, ma non è stato fatto molto lavoro su Swing negli ultimi 10 anni). Si potrebbe sostenere che Swing è stato buono per cominciare, ma sappiamo tutti che il codice si decompone. E questo è particolarmente vero per le UI di oggi.

    Questo ti lascia con SwingX. Dopo un lungo periodo di lento progresso, lo sviluppo è ripreso di nuovo . Lo svantaggio principale con Swing è che si basa su alcune vecchie idee che sono molto gentili di Edge 15 anni fa, ma che oggi si sentono "goffi". Ad esempio, le viste tabella supportano il filtraggio e l'ordinamento, ma è comunque necessario configurarlo. Dovrai scrivere molto codice della piastra per la caldaia solo per ottenere un'interfaccia utente decente che si sente moderna.

    Un'altra area debole è il tema. Ad oggi, ci sono molti temi in giro. Vedi qui per i primi 10 . Ma alcuni sono lenti, alcuni sono bacati, alcuni sono incompleti. Lo odio quando scrivo un'interfaccia utente e gli utenti si lamentano che qualcosa non funziona per loro perché hanno selezionato un tema dispari.

  3. JGoodies è un altro livello in cima a Swing, come SwingX. Cerca di rendere Swing più piacevole da usare. Il sito web sembra fantastico. Diamo un'occhiata al tutorial ... hm ... ancora alla ricerca ... aspetta. Sembra che non ci sia alcuna documentazione sul sito web. Google al salvataggio . No, niente tutorial utili.

    Non mi sento sicuro di un framework UI che cerca così difficile nascondere la documentazione da potenziali nuovi fan. Ciò non significa che JGoodies sia cattivo; Non sono riuscito a trovare nulla di buono da dire a riguardo, ma sembra bello.

  4. JavaFX. Grande, elegante. Il supporto è lì, ma ritengo che sia più un giocattolo lucido che un serio framework dell'interfaccia utente. Questo sentimento affonda le radici nella mancanza di componenti UI complessi come i tavoli ad albero. C'è un componente basato su webkit per visualizzare HTML .

    Quando fu presentato, il mio primo pensiero fu "cinque anni troppo tardi". Se il tuo obiettivo è una bella app per telefoni o siti web, bene. Se il tuo obiettivo è un'applicazione desktop professionale, assicurati che offra ciò di cui hai bisogno.

  5. Perno. La prima volta ne ho sentito parlare. È fondamentalmente un nuovo framework UI basato su Java2D. Quindi ho provato ieri. No Swing, solo un piccolo bit di AWT (new Font(...)).

    La mia prima impressione è stata bella. C'è una vasta documentazione che ti aiuta a iniziare. La maggior parte degli esempi vengono forniti con demo live (Nota: è necessario avere Java abilitato nel browser Web; questo è un rischio per la sicurezza ) nella pagina Web, quindi è possibile vedere il codice e il applicazione risultante affiancata.

    Nella mia esperienza, più impegno va nel codice che nella documentazione. Osservando i documenti di Pivot, un grande sforzo deve essere entrato nel codice. Nota che attualmente c'è un bug che impedisce ad alcuni esempi di funzionare ( PIVOT-858 ) nel tuo browser.

    La mia seconda impressione di Pivot è che è facile da usare. Quando mi sono imbattuto in un problema, in genere potevo risolverlo rapidamente osservando un esempio. Mi manca un riferimento di tutti gli stili che ogni componente supporta, però.

    Come con JavaFX, mancano alcuni componenti di livello superiore come un componente della tabella ad albero ( PIVOT-306 ). Non ho provato il caricamento pigro con la vista tabella. La mia impressione è che se il modello sottostante utilizza il caricamento pigro, allora è sufficiente.

    Promettente. Se puoi, provaci.

80
Aaron Digulla

SWT di per sé è piuttosto di basso livello e utilizza i widget nativi della piattaforma tramite JNI. Non è affatto collegato a Swing e AWT. Il Eclipse IDE e tutte le applicazioni Rich Client basate su Eclipse, come Vuze BitTorrent client , sono create usando SWT. Inoltre, se stai sviluppando plugin Eclipse, in genere utilizzerai SWT.
Ho sviluppato applicazioni e plug-in basati su Eclipse per quasi 5 anni, quindi sono chiaramente di parte. Tuttavia, ho anche una vasta esperienza nel lavorare con SWT e il JFace UI toolkit , che è costruito su di esso. Ho trovato JFace molto ricco e potente; in alcuni casi potrebbe anche essere la ragione principale per scegliere SWT. Ti consente di eseguire rapidamente un'interfaccia utente funzionante, purché sia ​​simile all'IDE (con tabelle, alberi, controlli nativi, ecc.). Ovviamente puoi anche integrare i tuoi controlli personalizzati, ma ciò richiede uno sforzo extra.

13
Zsolt Török

Vorrei suggerire un altro framework: Apache Pivot http://pivot.Apache.org/ .

L'ho provato brevemente e sono rimasto impressionato da ciò che può offrire come un framework RIA (Rich Internet Application) ala Flash.

Rende l'interfaccia utente utilizzando Java2D, riducendo così al minimo l'impatto di eredità (IMO, gonfio) di Swing e AWT.

11
Augustus Thoo

Un'altra opzione è usare Qt Jambi . Ha quasi tutta la grandezza di Qt (molti componenti, buona documentazione, facile da usare), senza il fastidio del C++. L'ho usato 3-4 anni fa per un piccolo progetto, anche se era quasi maturo.

Potresti voler vedere la discussione su Swing vs. Qt qui .

9
nimcap

Swing + SwingX + Miglayout è la mia combinazione di scelta. Miglayout è molto più semplice di quanto gli swing percepissero 200 diversi gestori di layout e molto più potenti. Inoltre, ti offre la possibilità di eseguire il "debug" dei tuoi layout, il che è particolarmente utile quando si creano layout complessi.

9
helpermethod

La mia opinione personale: vai su Swing insieme alla piattaforma NetBeans.

Se hai bisogno di componenti avanzati (oltre alle offerte NetBeans) puoi facilmente integrare SwingX senza problemi (o JGoodies) poiché la piattaforma NetBeans è completamente basata su Swing.

Non vorrei avviare una grande applicazione desktop (o una che sarà di grandi dimensioni) senza una buona piattaforma che si basa sul framework dell'interfaccia utente sottostante.

L'altra opzione è SWT insieme a Eclipse RCP, ma è più difficile (anche se non impossibile) integrare componenti "puri" di Swing in un'applicazione del genere.

La curva di apprendimento è un po 'ripida per la piattaforma NetBeans (anche se immagino sia vero anche per Eclipse) ma ci sono alcuni buoni libri su cui consiglio vivamente.

hai dimenticato per Java Desktop Aplication basato su JSR296 come Swing Framework integrato in NetBeans

escludendo AWT e JavaFX tutti i tuoi framework descritti sono basati su Swing, se inizierai con Swing, allora sarai comprensibile (chiaramente) per tutti questi Swing (basati su Framework)

ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies

tutto lì quadri (non so qualcosa di più su JGoodies) incl. JavaFX non ha da tempo alcun progresso, molti dei Framework basati su Swing vengono interrotti, se non addirittura senza la versione più recente

solo il mio punto di vista - il meglio di loro è SwingX, ma richiede una conoscenza approfondita di Swing,

Look and feel per i framework basati su Swing

4
mKorbel

Vorrei andare con Swing. Per il layout userei il layout del modulo JGoodies. Vale la pena studiare il white paper sul layout del modulo qui - http://www.jgoodies.com/freeware/forms/

Inoltre, se stai per iniziare a sviluppare un'enorme applicazione desktop, avrai sicuramente bisogno di un framework. Altri hanno sottolineato la struttura di netbeans. Non mi è piaciuto molto, quindi ne ho scritto uno nuovo che ora utilizziamo nella mia azienda. L'ho messo su sourceforge, ma non ho trovato il tempo per documentarlo molto. Ecco il link per sfogliare il codice:

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

La vetrina dovrebbe mostrarti come fare un semplice accesso in realtà ..

Fammi sapere se hai qualche domanda su di esso potrei aiutarti.

3
sethu

Sono stato abbastanza soddisfatto di Swing per le applicazioni desktop in cui sono stato coinvolto. Tuttavia, condivido la tua opinione su Swing che non offre componenti avanzati. Quello che ho fatto in questi casi è andare per JIDE. Non è gratuito, ma non è così costoso e ti dà molti più strumenti sotto la cintura. In particolare, offrono un TreeTable filtrabile.

3
sbrattla