Как работает этот код Swing?

Я вижу следующий код в проекте GUI Java / Swing:

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

eventBus.fireEvent(new MyDialogEvent(results));

В приведенном выше коде MyDialog extends JDialog. Итак, очевидно, что создается дочерний диалог (и каким-то образом отображается конечному пользователю), а затем, когда пользователь выходит из диалогового окна (нажав OK или какую-либо другую кнопку), bean-компонент results используется для запуска нового события в событии. автобус.

Но я борюсь с двумя вещами:

  1. Как / где Java говорят на самом деле рисовать / показывать диалог пользователю ?; а также
  2. Как / где Java говорят зависнуть / ждать, пока пользователь выйдет из диалогового окна, прежде чем запускать событие на шину?

Может быть, дочерний элемент JDialog всегда будет отображать диалог при создании JDialog и не будет возвращаться из конструктора до тех пор, пока диалог не будет завершен? Вот синопсис конструктора hte MyDialog сверху:

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();
    }
}

Заранее благодарим за любую помощь / понимание того, как открывается диалоговое окно, «зависает» (хотя я знаю, что он на самом деле не зависает / не зависает), закрывается, а затем запускает событие.


person Community    schedule 29.04.2013    source источник


Ответы (2)


1)

setVisible(true);

2)

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

Дополнительные сведения см. В JavaDocs для JDialog.

Наиболее актуальны:

person Andrew Thompson    schedule 29.04.2013
comment
Спасибо @Andrew Thompson (+1) - однако по поводу №2 я все еще не понимаю. Согласно конструктор Javadoc, устанавливающий для modal значение true, только блокирует ввод данных пользователем в другие окна верхнего уровня при отображении. Но это не то, что я здесь описываю. Я не верю, что это помешает выполнению следующей строки кода (MyDialogResults results = dlg.getResults();) до завершения конструктора, поскольку это не пользовательский ввод. - person ; 29.04.2013
comment
Истина в вызове super делает диалог модальным. Это означает, что вызов setVisible(true) не вернется, пока диалоговое окно не будет закрыто. - person Russell Zahniser; 29.04.2013
comment
блокирует ввод данных пользователем в другие окна верхнего уровня при отображении .. и останавливает выполнение следующей строки кода (это то, что следует добавить к этому). - person Andrew Thompson; 29.04.2013
comment
Спасибо @RussellZahniser (+1) - это последний кусок головоломки, который мне нужен! - person ; 29.04.2013