Domanda

Come posso evitare che venga mostrata una finestra di dialogo quando ce n'è già una sullo schermo?

Dettagli: nella mia applicazione sono in esecuzione molti timer. Se si verifica un errore irreversibile, tutti i thread interessati mostreranno un JDialog (di swingx.JXErrorPane.showDialog ()), che non è desiderato. Anche se cancello tutti i timer in esecuzione, verranno comunque visualizzate contemporaneamente alcune finestre di dialogo. Come posso ottenere che apparirà solo una finestra di dialogo?

Ho provato a rendere sincronizzato il metodo che chiama showDialog (), il che comporta il blocco dell'intera GUI. Anche l'uso di una bandiera non ha funzionato.

È stato utile?

Soluzione

Trasforma la finestra di dialogo in un osservatore e pubblica gli eventi di errore su questo nuovo osservatore (vedi Modello di progettazione dell'osservatore ). Quando si verifica un evento, la finestra di dialogo dovrebbe mostrarsi (con il frame principale come padre). Mostra gli errori recenti in una tabella nella finestra di dialogo. Aggiungi nuovi errori in fondo a quella tabella.

Un'altra opzione è quella di visualizzare gli errori in una tabella nel frame principale. Inserisci il tavolo in un JSplitPane in modo che gli utenti possano minimizzarlo.

Altri suggerimenti

Ancora un'altra opzione sarebbe quella di trasformare la finestra di dialogo in un singleton:

  • Dai alla finestra di dialogo un costruttore privato.
  • Crea un'istanza MyDialog statica privata " " - attributo nella classe dialog.
  • Crea un MyDialog pubblico statico getInstance () {...}; - metodo per restituire l'istanza e prima crearne un'istanza se è null.

Dove MyDialog dovrebbe essere il nome della classe della finestra di dialogo.

Quindi ogni volta che devi mostrare la finestra di dialogo fai semplicemente riferimento al singleton:

MyDialog.getInstance () showDialog ();.

Dove showDialog rende visibile la finestra di dialogo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top