Ich sehe den folgenden Code in einem Java/Swing-GUI-Projekt:Wie funktioniert dieser Swing-Code?
MyDialog dlg = new MyDialog(parent, isFizz);
MyDialogResults results = dlg.getResults();
eventBus.fireEvent(new MyDialogEvent(results));
In dem obigen Code, MyDialog extends JDialog
. Es wird also eindeutig ein untergeordneter Dialog erstellt (und dem Endbenutzer irgendwie angezeigt), und wenn der Benutzer das Dialogfeld beendet (indem er auf OK oder eine andere Schaltfläche klickt), wird eine Bean results
verwendet, um ein neues Ereignis für das Ereignis auszulösen Bus.
Aber ich bin zu kämpfen mit zwei Dingen:
- Wie/wo ist Java gesagt, tatsächlich zu ziehen/den Dialog mit dem Benutzer zeigen ?; und
- Wie/wo wird Java gesagt, zu warten, bis der Benutzer den Dialog beendet, bevor das Ereignis auf den Bus ausgelöst wird?
Ist es, dass ein JDialog
Kind immer den Dialog zeigen, wenn die JDialog
erstellt wird, und nicht aus dem Konstruktor zurück, bis der Dialog verlassen wird? Hier ist die Zusammenfassung der hte MyDialog
Konstruktor von oben:
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();
}
}
Vielen Dank im Voraus für jede Hilfe/Einblick mit Verständnis, wie der Dialog öffnet, „hängt“ (obwohl ich weiß, es ist nicht wirklich hing/gefroren), wird geschlossen, und feuert dann das Ereignis ab.
Dank @Andrew Thompson (+1) - aber für # 2 bin ich immer noch verwirrt. Nach dem [Konstruktor Javadoc] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean% 29) Wenn "modal" auf "true only" gesetzt wird, werden Benutzereingaben in andere Fenster der obersten Ebene blockiert, wenn sie angezeigt werden. Aber das ist nicht dasselbe wie das, was ich hier beschreibe. Ich glaube nicht, dass dies verhindern würde, dass die nächste Codezeile ('MyDialogResults results = dlg.getResults();') ausgeführt wird, bis der Konstruktor fertig ist, da dies keine "Benutzereingabe" ist. –
Das "Wahr" im Superaufruf macht den Dialog modal. Das bedeutet, dass der Aufruf von 'setVisible (true)' erst zurückkehrt, wenn der Dialog geschlossen wird. –
* "" blockiert Benutzereingaben in andere Top-Level-Fenster, wenn "* ..und stoppt die nächste Codezeile von der Ausführung (was hinzugefügt werden soll). –