Modello di progettazione per la gestione delle finestre in un'app Java Swing


9

Ho appena iniziato a creare la mia primissima piccola app Java Swing. All'apertura del programma, viene visualizzata una finestra singola e semplice con un'etichetta e un paio di pulsanti. Fare clic su uno di questi pulsanti 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 JFramecome argomento in ... praticamente ogni altro componente, ma mi sembra strano. Oppure, sta rendendo ogni pannello doppio come listener di azioni, ma non sembra neanche giusto.

Esiste un modello di progettazione che dovrei applicare qui? "Sostituisci il contenuto della finestra principale - e unica -" deve essere un'operazione ragionevolmente comune. Un nome per il modello sarebbe abbastanza; Posso utilizzare Google da solo da lì. (Non direi di no a una spiegazione più lunga, però.)


Essendo una domanda sulle attuali tecniche di programmazione, probabilmente otterrai molte più risposte su Stack Overflow.
Alex Feinman,

Risposte:


6

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

Ad esempio, se si è verificato un evento in JPanel1, JPanel1 avvisa il mediatore (JFrame). JFrame agisce quindi modificando JPanel2.

Cordiali saluti: tutti i miei progetti erano app GUI di dimensioni medio-piccole, quindi non sono sicuro che questo modello si ridimensioni bene. Ma se si potesse progettare un'architettura adeguata, il modello del mediatore può essere una solida base.


4

È possibile avere il metodo principale per visualizzare un JDialog. Quando la finestra di dialogo viene chiusa, viene creato e visualizzato il JFrame principale.

JDialog offre metodi statici di facile utilizzo 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 dell'interfaccia utente, un'applicazione Swing non è legata a un frame o una finestra specifici. Puoi creare tutte le finestre che vuoi. L'applicazione termina quando terminano tutti i thread, non quando tutte le finestre sono state eliminate. Ciò si ottiene in genere con System.exit (0).

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


1
-1. Questa è una domanda sul modello di progettazione. Raccomandando di cambiare le specifiche che mi sono state date e terminando con "Non so se esiste un modello di progettazione specifico" non risponde.
apre il

2
La sua risposta è molto accurata. Non hai problemi di progettazione, devi imparare come funzionano prima i moduli e le finestre di dialogo.
Alex,

2

Molti framework dell'interfaccia utente hanno regole diverse per quanto riguarda la finestra 'principale' o 'attiva'. Un modo per gestire quella complessità è avere la finestra principale, che controlla il ciclo principale dei messaggi, per essere invisibile (o piccola, senza pixel 1 pixel, fuori dallo schermo per i framework particolarmente fastidiosi). quindi fare in modo che tutte le altre finestre e finestre di dialogo siano figlio di quella finestra.

Questo metodo presenta molti vantaggi, in particolare quando si gestiscono i keyclick globali e gli eventi del mouse, nonché nella registrazione di livello superiore e nella gestione delle eccezioni.

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.