2012-04-13 15 views
41

Domande simili a questo vengono poste periodicamente, ma molte di queste risposte sono obsolete.Come posso creare un'applicazione desktop Java "dall'aspetto moderno"?

Ho bisogno di creare un'applicazione desktop multipiattaforma in Java con una GUI di qualità comparabile alle app desktop contemporanee.

Swing è la scelta predefinita, ma devo ancora incontrare un'applicazione Swing che non sembra, per lo meno, abbastanza datata e goffa (soggettiva, lo so, ma con le GUI è difficile evitare i giudizi estetici) .

Ho notato che il nuovo client Bitcoin ora utilizza QT con binding Java e ha un'interfaccia utente attraente, ma questo ha lo svantaggio di non essere più Java puro.

Gran parte di ciò che trovo quando cerco le librerie relative a Swing ha 5 anni o più, anche se da allora l'estetica delle applicazioni desktop si è evoluta in modo significativo.

Se è necessario creare un'applicazione desktop Java da zero, cosa si utilizzerà per la sua GUI?

+0

Non credo che la questione sarà sopravvivere, ma ... –

+1

Questa domanda non è appropriato qui, come si chiede per la discussione e di opinione. Le FAQ menzionano specificamente le domande sul tipo di discussione come inadatte per il formato Q & A di SO. Se hai domande specifiche sulla programmazione, chiedi a loro e cercheremo di aiutarti. Le domande di conversazione non funzionano bene qui, in quanto non possono essere risolte in modo definitivo. Grazie. :) –

+27

Ken, non sono d'accordo. Non tutte le domande hanno una risposta in bianco e nero, e se SO è limitato alle domande che hanno una risposta in bianco e nero, allora sarà significativamente meno prezioso. In generale, penso che le persone siano troppo ansiose per chiudere le domande qui, dato che il danno causato da un falso positivo (una domanda che non è stata chiusa) non è molto maggiore di quella provocata da un falso negativo (una domanda che avrebbe dovuto essere chiuso ma non lo era). – sanity

risposta

8

Cerca di cambiare l'aspetto del tuo programma Java. Questo ti consente di personalizzare il "tema" generale del tuo programma. Here sono informazioni su come modificare il LAF.

+1

Sì, ne sono a conoscenza - avete qualche raccomandazione specifica sui buoni LAF moderni per Swing? – sanity

+0

Personalmente preferisco il GTK LAF. Ecco un paio di altri carini: http://dlemmermann.wordpress.com/2011/05/10/the-best-swing-look-feel-bizlaf/. – lrAndroid

9

Hai esaminato JavaFX 2.0? È progettato per interoperabilità facilmente con Swing e ha molti controlli moderni di aspetto "bello".

Inoltre, come cita lrAndroid, un'applicazione swing può apparire come un'applicazione nativa se si imposta l'aspetto del sistema e sentire con:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
1

QT è piuttosto estesa, ma anche molto grande (gonfio) e complesso. C'è anche la libreria SWT che viene utilizzata da Open Office, per esempio. SWT utilizza i widget di interfaccia utente nativa per pulsanti, tabelle ecc. Dove Swing li emula.

Tuttavia, la tendenza è chiaramente verso la scrittura di applicazioni rich client per il browser utilizzando HTML e Javascript. Entrambi hanno fatto passi da gigante negli ultimi anni.

HTML5 si rivolge in modo specifico alle applicazioni rich client con funzionalità quali moduli migliori e database locale per supportare scenari disconnessi (si noti che questa ultima funzione non è ancora standardizzata ma è implementata da tutti gli ultimi browser).

Javascript ha ora potenti librerie con jQuery e i suoi numerosi plugin. Esistono anche linguaggi come Coffeescript che possono essere usati per produrre Javascript con una sintassi più semplice e potente.

Non è inoltre necessario che tali app si connettano a un server esterno. Server locali di dimensioni ridotte (ad esempio: jetty, node.js, ...) e database (SQLite, H2, ...) possono essere installati sul client per creare un'applicazione completamente autonoma.

+0

Puoi fornire esempi di app desktop moderne con interfacce utente basate sul Web? So che [Freenet] (http://freenetproject.org/) lo fa, ma non è certo un esempio di buona progettazione dell'interfaccia utente: -/ – sanity

31

Posso anche offrirti un nuovo LaF da esaminare - WebLaF. Attualmente sto lavorando su di esso per portare molte funzionalità dell'interfaccia utente e rendere il lavoro con Swing molto più semplice per chiunque semplicemente utilizzando le funzionalità di base della libreria WebLaF.

Alcuni esempi che mostra come alcuni dei componenti WebLaF assomigliano: Some of WebLaF components

Alcuni dei principali obiettivi che sto targeting:

  1. Grandi e di aspetto moderno L & F con il supporto per tutti i componenti Swing
  2. Un vasto insieme di componenti aggiuntivi che non troverete nell'oscillazione standard
  3. Un grande insieme di classi di utilità per assistervi con la scrittura di t egli codice

biblioteca WebLaF suggerisce anche un paio di altri vantaggi e caratteristiche uniche:

  1. Si tratta di un progetto open-source (GPLv3 licenza)
  2. componenti di designazione facile utilizzando i pittori del sistema (in particolare con 9 file -Patch)
  3. rapida e semplice la personalizzazione dello stile di default "Web"
  4. Un sacco di funzioni per accelerare e semplificare swing applicazione creazione dell'interfaccia

si può provare il demo-app per vedere se è moderno e abbastanza semplice :)

+0

il tuo migliore questo LAF è fantastico :) –

+0

Lavoro assolutamente bellissimo Mikle, sei essere lodato – jewelsea

+0

+++ parte superiore di L & F, si prega di ignorare - ma devono fare qualcosa con getPreferredSize (una costante per L & F intero applicato per tutti i JComponents) e gap v.s. Alingment per Standard LayoutManagers (certo a chi importa) – mKorbel

6

moderna Javascript quadri (ExtJS, Dojo, ecc ...) offrono la ricchezza stessa widget o più (Excel come griglie per esempio), una più ampia varietà di L & F e di solito si adattano meglio al sistema operativo dell'utente. Gli utenti sono anche molto a proprio agio con i loro browser e, ehi, "roba moderna" è sul web, e il web moderno oggi è HTML + Javascript.

L'overhead della conversione di un'app in "web like" è minimo. Un Jetty incorporato può rimanere molto piccolo e lo spazio su disco è diventato molto meno di un problema.

Ci sono ulteriori vantaggi in questo percorso per le future evoluzioni dell'applicazione.

  • Improvvisamente, l'app desktop diventa un'app server, a cui è possibile accedere da un altro desktop. Siamo stati in grado di promuovere un'app desktop sul "portale" in poche settimane.
  • Riscrivere l'app in termini di servizi Web (Ajax) offre una facile transizione alla creazione di uno stack di servizi REST (o SOAP ...) completo. L'app può quindi essere integrata ad altre applicazioni, facilmente monitorata esternamente, ecc ...
  • Il supporto di altri dispositivi (smartphone, tablet, ...) diventa molto più semplice, concentrandosi solo sul livello dell'interfaccia utente
  • As l'app cresce, la separazione delle preoccupazioni è più pulita; gli sviluppatori che lavorano sull'interfaccia utente non devono interferire con il codice di basso livello.
  • Ci sono molti eccellenti designer e sviluppatori JS/HTML che non programmano in Java.

EDIT

3 anni più tardi questo è diventato estremamente facile grazie al Electron

+0

Come gestite l'avvio del browser Web in modo multipiattaforma?Puoi citare alcuni esempi di app desktop moderne usando il browser web per la loro interfaccia utente? – sanity

+2

Con Java 6+ 'Desktop.getDesktop() .browse (nuovo URI (uriString));' –

+1

.. che è possibile associare a 'TrayIcon'. Se l'app è in esecuzione in background, l'interfaccia utente può essere "visualizzata" facendo clic sull'icona e eseguendo nuovamente la chiamata sopra. –

2

So che questa domanda è vecchio, ma se si don' t voglio usare FX e voglio ancora usare Swing, quindi prova MacWidgets, io ci ho Ed è su un paio di progetti. È molto leggero e sembra fantastico. Di seguito c'è un vecchio progetto su cui stavo lavorando, nel tempo ho perfezionato l'utilizzo di macwidgets e ora lo uso internamente nella mia azienda.

http://www.digitalhand.net/projects/jdataanalyzer/mainGUI.png