2013-04-29 22 views
5

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:

  1. Jak/gdzie jest Java powiedziano faktycznie narysować/wyświetlić okno dialogowe dla użytkownika ?; i
  2. 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.

Odpowiedz

1

1)

setVisible(true); 

2)

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

Przeczytaj Javadocs dla JDialog więcej szczegółów.

Najbardziej istotne są:

+0

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 ". –

+1

"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. –

+0

* "" 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ć). –

1

Dialog.setVisible() to metoda, która pokazuje okno i blokuje aż okno jest zamknięte. Zobacz documentation for Dialog. dispose() następnie niszczy obiekt okna dialogowego.

Więc twoje przypuszczenie było częściowo poprawne. Konstruktor wyświetla okno dialogowe, blokując je do momentu zamknięcia, a następnie niszcząc okno dialogowe. Jest to jednak funkcja "MyDialog", a nie JDialog

+0

Okno dialogowe nie zostanie zniszczone, dopóki instancja dlg nie wykracza poza zakres. Dlatego możesz odzyskać wartości z okna dialogowego po naciśnięciu przycisku OK. Należy również sprawdzić przycisk Anuluj po linii konstruktora okna dialogowego. –