Quali sono le migliori pratiche di sviluppo di Java Swing?

16

Mentre faccio la mia pre-ricerca per questa domanda , ho scoperto che non ci sono molte informazioni ben organizzate sulle migliori pratiche di Swing Java disponibili su Internet. Quindi immagino che darò a Stack Exchange una possibilità di costruire quella One Great List.

Quali sono le migliori pratiche di sviluppo di Java Swing? Cosa hai trovato che funzioni per te e perché?

    
posta Pops 24.01.2011 - 22:50
fonte

2 risposte

12

Posso solo rispondere per ciò che ha funzionato per me. Altri commentatori hanno sottolineato che le GUI Java in generale cadono nella "valle misteriosa" di un aspetto non proprio nativo, e non ne discuto.

Fai buon uso dell'API di azione. Ti consente di incapsulare meglio le diverse azioni eseguite dall'utente e ti consente di collegarle a scorciatoie, tasti di scelta rapida, pulsanti e altri oggetti di input molto più facilmente .

Utilizza un gestore di layout appropriato. GridBagLayout è estremamente potente, ma direi che è impossibile da mantenere senza una quantità eccessiva di commenti. Quando eseguo strumenti di analisi del codice statici come Sonar su una vecchia GUI che mantengo, indica sempre le enormi quantità di numeri magici per rendere il layout di GridBar giusto. Ho avuto molto successo con GroupLayout, che evita di dover specificare l'allineamento perfetto per i pixel.

Se pensi di aver bisogno di un JDialog ... probabilmente no. Le finestre di dialogo sono orribili, in termini di esperienza utente: questa applicazione ha deciso di utilizzarle per ogni menu e modulo e di imporre regole sempre in primo piano in modi bizzarri. Questo si è trasformato in un incubo di manutenzione quando in realtà dovevamo avvisare qualcosa nel menu. Cue frustrato facendo clic su dialoghi non focalizzabili e quindi non eliminabili.

Usa SwingWorker invece di far ruotare il tuo multithreading, dove appropriato. È molto semplice estendere SwingWorker e svolgere alcune attività di lunga durata fornendo al contempo aggiornamenti regolari alla GUI. Pensa al download di un aggiornamento del client. Gestirà la pianificazione del thread di lavoro per te e ti consentirà di pubblicare percentuali di download per la visualizzazione, in modo da poter aggiornare ProgressBar o cosa hai.

Questo è tutto ciò che posso suggerire, nella mia esperienza dichiaratamente limitata.

    
risposta data 25.01.2011 - 17:53
fonte
4

Direi che una delle prime cose è non lavorarci direttamente. Il sistema di layout in Swing (IMHO) è terribile, e provare a farne un'app sostanziale è un incubo.

Due dei molti gestori di layout alternativi che ho utilizzato sono MigLayout e Layout MultiSplitPane. MigLayout ha uno scopo più generale e rende qualsiasi layout a cui puoi pensare in modo facile e sano. MultiSplitPane è più specifico; L'ho usato per creare semplici layout per le GUI che non avevano molta complessità.

EDIT : Ciò non sostituisce swing . Se devi utilizzare Swing, puoi comunque utilizzare questi gestori di layout poiché gestiscono solo lo swing, non lo sostituiscono.

Ovviamente l'alternativa migliore è semplicemente non usare Swing. Swing è pesantemente criticato per essere stato orribile con cui lavorare, non sembra nativo e lento. Esistono molte alternative che hanno imparato da swing cosa non fare come Qt, SWT, e penso persino GTK. Queste sono ottime soluzioni a lungo termine per i mal di testa di Swing

EDIT : come ha detto @Lord Torgamus, questi non sono realmente disponibili se sei costretto a usare Swing. Se hai intenzione di usarli al meglio per risolvere il problema quando crei il tuo progetto, non i 3/4 del percorso o quando raccogli le app legacy.

Vorrei anche notare che la maggior parte delle GUI alternative usano le librerie native in modo tale da assomigliare al sistema operativo, quindi ricadono su Swing o su un'altra GUI Pure Java.

    
risposta data 25.01.2011 - 08:02
fonte

Leggi altre domande sui tag