2013-04-29 22 views
5

Vedo il seguente codice in un progetto GUI/Java Swing:Come funziona questo codice Swing?

MyDialog dlg = new MyDialog(parent, isFizz); 
MyDialogResults results = dlg.getResults(); 

eventBus.fireEvent(new MyDialogEvent(results)); 

Nel codice precedente, MyDialog extends JDialog. In modo chiaro, una finestra di dialogo figlio viene costruita (e in qualche modo mostrata all'utente finale), quindi quando l'utente chiude la finestra di dialogo (facendo clic su OK o su un altro pulsante), un bean results viene utilizzato per generare un nuovo evento sull'evento autobus.

Ma io sto lottando con due cose:

  1. Come/dove si Java stato detto di disegnare in realtà/mostrare la finestra di dialogo per l'utente ?; e
  2. Come/dove viene detto a Java di appendere/attendere che l'utente esca dalla finestra di dialogo, prima di attivare l'evento sul bus?

E 'che un bambino JDialog mostrerà sempre la finestra di dialogo in cui viene creata la JDialog, e non tornare dal costruttore fino a quando la finestra di dialogo si esce? Ecco la sinossi di HTE MyDialog costruttore dall'alto:

public class MyDialog extends JDialog { 
    private boolean isFizz; 
    private MyDialogResults results; 

    // Getters and setters for all properties... 

    public MyDialog(Frame parent, boolean isFizz) { 
     super(parent, "My Dialog", true); 

     setIsFizz(isFizz); 

     setVisible(true); 
     dispose(); 
    } 
} 

Grazie in anticipo per qualsiasi aiuto/conoscenza con la comprensione di come la finestra si apre, "blocca" (anche se so che la sua non è in realtà appeso/congelati), si chiude, e poi spara l'evento.

risposta

1

1)

setVisible(true); 

2)

super(parent, "My Dialog", true); 

Leggere le JavaDocs per JDialog per maggiori dettagli.

I più rilevanti sono:

+0

Grazie @Andrew Thompson (+1) - tuttavia per # 2 sono ancora confuso. Secondo il [costruttore Javadoc] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean% 29) l'impostazione 'modal' su true solo" blocca l'input dell'utente ad altre finestre di primo livello quando viene mostrato ". Ma non è la stessa cosa che sto descrivendo qui. Non credo che impedirebbe la prossima riga di codice ('MyDialogResults results = dlg.getResults();') dall'esecuzione fino alla fine del costruttore, poiché non è "input dell'utente". –

+1

Il "true" nella super chiamata rende il dialogo modale. Ciò significa che la chiamata a 'setVisible (true)' non ritorna fino a quando la finestra di dialogo non viene chiusa. –

+0

* "" blocca l'input dell'utente ad altre finestre di primo livello quando viene mostrato "* ..e ferma la prossima riga di codice dall'esecuzione (è ciò che dovrebbe essere aggiunto a quello). –

1

Dialog.setVisible() è il metodo che mostra la finestra e blocca fino a quando la finestra è chiusa. Vedi lo documentation for Dialog. Dispose() quindi distrugge l'oggetto di dialogo.

Quindi la tua ipotesi era parzialmente corretta. Il costruttore mostra la finestra di dialogo, blocca fino a quando non viene chiusa e quindi distrugge la finestra di dialogo in seguito. Tuttavia, questa è una funzionalità di "MyDialog", non di JDialog

+0

La finestra di dialogo non viene distrutta fino a quando l'istanza di dlg non viene spostata. Ecco perché è possibile recuperare i valori dalla finestra di dialogo dopo che l'utente ha premuto il pulsante OK. Dovrebbe esserci un segno di spunta per il pulsante Annulla dopo la riga del costruttore di finestre di dialogo. –

Problemi correlati