私は、Java/SwingのGUIプロジェクトに次のコードを参照してください:上記のコードでこのSwingコードはどのように機能していますか?
MyDialog dlg = new MyDialog(parent, isFizz);
MyDialogResults results = dlg.getResults();
eventBus.fireEvent(new MyDialogEvent(results));
、MyDialog extends JDialog
。つまり、子供のダイアログが構築されていて(何らかの形でエンドユーザーに表示されている)、ユーザーがダイアログを終了すると(OKなどのボタンをクリックすると)、results
のBeanがイベントの新しいイベントを発生させますバス。
しかし、私は二つのことで苦労しています:
- はどのように/どこのJavaは、実際にユーザーにダイアログを表示/描画するように言われている?;
- Javaがイベントをバスに送信する前に、ユーザーがダイアログを終了するのをハング/待機する方法と場所はどこですか?それは
JDialog
子供は常にJDialog
が作成されたときにダイアログを表示し、ダイアログが終了するまでは、コンストラクタから返されないこと
ですか? 、
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();
}
}
ダイアログが開きどのように理解した上で任意のヘルプ/洞察力を事前に感謝し、「ハング」(私はそのは実際に凍結/ハングしていない知っているが)閉じ、そして:ここでは上からHTE MyDialog
コンストラクタの概要ですイベントを発生させます。
ありがとう@Andrew Thompson(+1) - しかし、#2ではまだ混乱しています。 [コンストラクタJavadoc](http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean%29) '' modal''をtrueに設定するだけで、 "表示されたときに他のトップレベルウィンドウへのユーザー入力をブロックします"。しかし、それは私がここで説明しているものと同じではありません。私は、コードの次の行( 'MyDialogResults results = dlg.getResults();')がコンストラクタが終了するまで実行されないようにすることはできないと信じていません。 –
スーパーコールの「true」は、ダイアログをモーダルにします。つまり、 'setVisible(true)'の呼び出しはダイアログが閉じられるまで戻りません。 –
* ""表示されたときに他のトップレベルウィンドウへのユーザー入力をブロックする "* ..次のコード行の実行を停止します(これに追加する必要があります)。 –