widzę następujący kod w projekcie GUI/Java Swing:Jak działa ten kod Swing?
MyDialog dlg = new MyDialog(parent, isFizz);
MyDialogResults results = dlg.getResults();
eventBus.fireEvent(new MyDialogEvent(results));
W powyższym kodzie, MyDialog extends JDialog
. Jasne jest, że tworzone jest okno dialogowe podrzędne (i jakoś pokazane użytkownikowi końcowemu), a kiedy użytkownik wyjdzie z okna dialogowego (klikając OK lub inny przycisk), zostanie użyta fasola results
do uruchomienia nowego wydarzenia w wydarzeniu autobus.
Ale mam zmaga się z dwóch rzeczy:
- Jak/gdzie jest Java powiedziano faktycznie narysować/wyświetlić okno dialogowe dla użytkownika ?; i
- W jaki sposób/gdzie Java jest informowana, aby zawiesić/poczekać, aż użytkownik opuści okno dialogowe, zanim wystrzeli zdarzenie do magistrali?
Czy to, że JDialog
dziecko będzie zawsze pokazuj okna gdy JDialog
jest tworzony, a nie powrót z konstruktora aż okno zostanie zamknięty? Oto streszczenie hte MyDialog
konstruktor z góry:
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();
}
}
Dzięki z góry za wszelką pomoc/wglądu ze zrozumieniem, jak okno dialogowe, „zawiesza się” (choć wiem, że nie rzeczywiście wisiał/mrożone), zamyka się, a następnie uruchamia to wydarzenie.
Dzięki @Andrew Thompson (+1) - jednak dla # 2 nadal jestem zdezorientowany. Według [konstruktora Javadoc] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean% 29) ustawienie "modal" na true "blokuje wejście użytkownika do innych okien najwyższego poziomu, gdy jest to pokazane". Ale to nie to samo, co tutaj opisuję. Nie wierzę, że uniemożliwiłoby to wykonanie następnej linii kodu ('MyDialogResults results = dlg.getResults();)) do czasu zakończenia konstruktora, ponieważ nie jest to" wejście użytkownika ". –
"Prawda" w super rozmowie powoduje, że dialog jest modalny. Oznacza to, że wywołanie 'setVisible (true)' nie powróci, dopóki okno dialogowe nie zostanie zamknięte. –
* "" blokuje dane wprowadzane przez użytkownika w innych oknach najwyższego poziomu, gdy są wyświetlane "*.i zatrzymuje wykonywanie następnej linii kodu (jest to, co należy do niej dodać). –