Design pattern per la gestione delle finestre in un'app per Java Swing

9

Ho appena iniziato a creare la mia primissima app Java Swing. Quando il programma si apre, visualizza una singola finestra semplice con un'etichetta e un paio di pulsanti. Cliccando su uno di questi pulsanti si dovrebbe cancellare la schermata di benvenuto e sostituirla con un pannello completamente diverso.

Non sono sicuro di quale sia il modo migliore per creare tale funzionalità. Un metodo sarebbe quello di passare il mio JFrame come argomento in ... praticamente su ogni altro componente, ma questo mi sembra intrusivo. Oppure, rende ogni pannello doppio come un listener di azioni, ma non sembra giusto,

C'è uno schema di progettazione che dovrei applicare qui? "Sostituire il contenuto della finestra principale - e solo -" deve essere un'operazione ragionevolmente comune. Un nome per il modello sarebbe sufficiente; Posso usare Google da solo da lì. (Tuttavia non direi no a una spiegazione più lunga.)

    
posta Pops 24.01.2011 - 22:38
fonte

3 risposte

6

Quando creo app Swing, di solito lo baso sul modello di mediatore. In questo modello, una classe Mediator (in genere il JFrame principale) gestisce le diverse parti della GUI (in genere JPanels, JMenus ...) e si occupa della comunicazione tra di loro.

Ad esempio, se si verifica un evento in JPanel1, JPanel1 notifica al mediatore (JFrame). la JFrame quindi agisce modificando JPanel2.

FYI: tutti i miei progetti erano applicazioni GUI di piccole-medie dimensioni, quindi non sono sicuro che questi modelli si adattino bene. Ma se si può progettare un'architettura adeguata, il modello di Mediatore può essere una solida base.

    
risposta data 05.02.2011 - 20:21
fonte
4

Puoi avere il metodo principale per visualizzare un JDialog. Quando la finestra di dialogo è chiusa, la JFrame principale viene creata e visualizzata.

JDialog offre metodi statici facili da usare che visualizzano una finestra di dialogo con contenuti e pulsanti personalizzati e restituiscono il codice del pulsante su cui è stato fatto clic. Testando questo valore, il metodo principale può decidere di visualizzare il frame principale o uscire (o qualsiasi altra cosa). Si prega di leggere il Javadoc.

A differenza di alcuni vecchi framework UI, un'applicazione Swing non è legata a un frame o finestra specifici. Puoi creare tutte le finestre che vuoi. L'applicazione termina quando tutti i thread terminano, non quando tutte le finestre sono state eliminate. Questo è in genere ottenuto con System.exit (0).

Non so se esiste un modello di design specifico per quel caso. Raccomando il tutorial di Java Swing.

    
risposta data 25.01.2011 - 11:41
fonte
2

Molti framework dell'interfaccia utente hanno regole diverse per la finestra "principale" o "attiva". Un modo per gestire tale complessità consiste nel fatto che la finestra principale, che controlla il loop del messaggio principale, è invisibile (o piccola, 1 pixel senza cromo, fuori dallo schermo per i framework particolarmente fastidiosi). quindi fai in modo che tutte le altre finestre e finestre di dialogo siano figlio di quella finestra.

Questo metodo ha molti vantaggi, specialmente quando si tratta di keyclicks globali e eventi del mouse, nonché nella registrazione di livello superiore e nella gestione delle eccezioni.

    
risposta data 31.01.2011 - 03:29
fonte

Leggi altre domande sui tag