Swing vs JavaFx per applicazioni desktop [chiuso]


195

Ho un programma molto grande che attualmente utilizza SWT. Il programma può essere eseguito su Windows, Mac e Linux ed è una grande applicazione desktop con molti elementi. Ora che SWT è piuttosto vecchio, vorrei passare a Swing o JavaFX. E vorrei sentire i tuoi pensieri su tre cose.

La mia preoccupazione principale è cosa sarà meglio per un'applicazione GUI desktop? (Ho guardato online e molte persone suggeriscono che JavaFX è buono quanto Swing, ma non ho visto molti argomenti validi tranne le semplici guerre di opinioni). Deve funzionare sia su Windows, Mac che su alcune diffuse distribuzioni Linux.

  • Cosa sarà più pulito e più facile da mantenere?

  • e cosa sarà più veloce da costruire da zero?

Sto usando la metologia MVC nella mia applicazione, se questo è di qualche aiuto.


23
JavaFX è buono se stai iniziando da zero. Anche perché JavaFX sta sostituendo ufficialmente Swing come libreria UI Oracle per Java. Ciò non significa che Swing sia eliminato. Significa solo che JavaFX riceverà molta più attenzione in ogni versione. Detto questo, ci sono già un milione e mezzo di domande su questo argomento su SO e altrove su Google.
nico_c,

3
stackoverflow.com/questions/10587713/… Ho anche citato Google. Un sacco già là fuori.
nico_c,

Ok, allora il suggerimento sembra davvero essere fx, lo terrò aperto, ma accetterò una risposta immagino. Grazie per i collegamenti.
Quillion

1
Ecco un breve riepilogo di JavaFX sebbene uno qualsiasi di SWT, Swing o JavaFX funzionerà per produrre un'applicazione desktop.
jewelsea,

Nessuno lo ha menzionato, ma JavaFX non viene compilato o eseguito su alcune architetture considerate "server" da Oracle (ad esempio Solaris), a causa del supporto "jfxrt.jar" mancante.
Malcolm Boekhoff

Risposte:


154

Cosa sarà più pulito e più facile da mantenere?

A parità di condizioni, probabilmente JavaFX: l'API è molto più coerente tra i componenti. Tuttavia, questo dipende molto più da come viene scritto il codice piuttosto che dalla libreria utilizzata per scriverlo .

E cosa sarà più veloce da costruire da zero?

Molto dipendente da ciò che stai costruendo. Swing ha più componenti in circolazione per esso (di terze parti e integrati) e non tutti si sono ancora fatti strada verso la nuova piattaforma JavaFX, quindi potrebbe esserci una certa quantità di reinventare la ruota se hai bisogno di qualcosa a un po 'personalizzato. D'altra parte, se si desidera eseguire transizioni / animazioni / elementi video, questo è più semplice in FX con ordini di grandezza.

Un'altra cosa da tenere a mente è (forse) aspetto. Se devi assolutamente avere l'aspetto del sistema predefinito, JavaFX (al momento) non può fornirlo. Non è un grande must per me (preferisco comunque l'aspetto FX predefinito) ma sono consapevole che alcune politiche impongono una limitazione agli stili di sistema.

Personalmente, vedo JavaFX come la libreria UI "emergente" che non è ancora del tutto lì (ma più che utilizzabile), e Swing come la libreria UI legacy borderline che è completamente descritta e supportata per il momento, ma probabilmente non lo sarà così tanto negli anni a venire (e quindi è probabile che FX lo raggiungerà ad un certo punto).


1
Credo che tutti questi punti si applichino anche al mondo .NET e al mondo della GUI desktop, in cui Windows Presentation Foundation è l'approccio moderno che mira a sostituire i vecchi Windows Form, quindi è teoricamente migliore sotto tutti gli aspetti tranne che non lo sarà (ancora? ma sono passati anni) supportano i controlli comuni nativi / l'aspetto della shell che ti aspetteresti, come una semplice finestra di dialogo per i file / browser di directory / controllo della visualizzazione ad albero.
Bitoolean

84

Come affermato da Oracle, JavaFX è il passo successivo nella loro strategia rich client basata su Java. Di conseguenza, questo è ciò che consiglio per la tua situazione:

Cosa sarebbe più facile e più pulito da mantenere

  • JavaFX ha introdotto diversi miglioramenti rispetto a Swing, come la possibilità di markup delle interfacce utente con FXML e temi con CSS. Ha un grande potenziale per scrivere un codice modulare, pulito e gestibile.

Cosa sarebbe più veloce da costruire da zero

  • Questo dipende fortemente dalle tue abilità e dagli strumenti che usi.
    • Per lo swing, vari IDE offrono strumenti per un rapido sviluppo. Il migliore che ho trovato personalmente è il generatore di GUI in NetBeans .
    • JavaFX ha anche il supporto di vari IDE, sebbene non così maturo come il supporto di Swing al momento. Tuttavia, il suo supporto per il markup in FXML e CSS rende intuitivo lo sviluppo della GUI su JavaFX.

Supporto per modelli MVC

  • JavaFX è molto amichevole con il modello MVC e puoi separare in modo chiaro il tuo lavoro come: presentazione (FXML, CSS), modelli (Java, oggetti di dominio) e logica (Java).
  • IMHO, il supporto MVC in Swing non è molto allettante. Il flusso che vedrai tra i vari componenti manca di coerenza.

Per maggiori informazioni, dai un'occhiata a queste FAQ post di Oracle riguardanti JavaFX qui.


14

Nessuno lo ha menzionato, ma JavaFX non viene compilato o eseguito su alcune architetture considerate "server" da Oracle (ad esempio Solaris), a causa del supporto "jfxrt.jar" mancante. Stick con SWT, fino a nuovo avviso.


13
@Quillion chiede in particolare qualcosa per creare un'applicazione desktop che "deve funzionare su Windows, Mac e alcune versioni popolari di Linux". . Quindi immagino che non gli importi di Solaris.
Tim Büthe

5

Non credo che ci sia una risposta giusta a questa domanda, ma il mio consiglio sarebbe di attenersi a SWT a meno che non si incontrino gravi limitazioni che richiedono una revisione così massiccia.

Inoltre, SWT è in realtà più recente e gestito più attivamente di Swing. (È stato originariamente sviluppato in sostituzione di Swing utilizzando componenti nativi).


16
SWT non è mai stato progettato per sostituire Swing. Come mai? Swing è arrivato con Java di SUN e SWT funziona solo su 4 o 5 piattaforme e proviene originariamente da IBM ed è stato ulteriormente sviluppato in Eclispe Foundation. Se mai potessi dire: SWT mirava a sostituire AWT.
Angel O'Sphere,

0

Mi guarderei intorno per trovare alcuni componenti (di terze parti?) Che fanno quello che vuoi. Ho dovuto creare componenti Swing personalizzati per una vista dell'agenda in cui è possibile prenotare più risorse, nonché una griglia simile a Excel che funziona bene con la navigazione da tastiera e così via. Mi sono divertito moltissimo a farli lavorare bene perché avevo bisogno di approfondire molte delle molte complicazioni di Swing ogni volta che mi imbattevo in un problema. Il comportamento del mouse e della messa a fuoco e molte altre cose possono essere molto difficili da ottenere, specialmente per un utente occasionale di Swing. Spero che JavaFX sia un po 'più orientato al futuro e senza problemi.


0

Sui notebook più vecchi con video integrato, l'app Swing si avvia e funziona molto più velocemente dell'app JavaFX. Per quanto riguarda lo sviluppo, consiglierei di passare a Scala: l'app Scala Swing comparabile contiene un codice 2..3 volte inferiore a Java. Per quanto riguarda Swing vs SWT: la GUI di Netbeans è molto più veloce di Eclipse ...


Scala Swing è buono da menzionare
disegna il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.