2013-04-29 10 views
5

私は、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がイベントの新しいイベントを発生させますバス。

しかし、私は二つのことで苦労しています:

  1. はどのように/どこのJavaは、実際にユーザーにダイアログを表示/描画するように言われている?;
  2. 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コンストラクタの概要ですイベントを発生させます。

答えて

1

1)

setVisible(true); 

2)

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

詳細については、JDialogのJavadocを読みます。

最も関連は以下のとおりです。JDialog(Frame,String,modal)

  • ため

  • +0

    ありがとう@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();')がコンストラクタが終了するまで実行されないようにすることはできないと信じていません。 –

    +1

    スーパーコールの「true」は、ダイアログをモーダルにします。つまり、 'setVisible(true)'の呼び出しはダイアログが閉じられるまで戻りません。 –

    +0

    * ""表示されたときに他のトップレベルウィンドウへのユーザー入力をブロックする "* ..次のコード行の実行を停止します(これに追加する必要があります)。 –

    1

    Dialog.setVisible()ダイアログが閉じられるまで、ダイアログやブロックを示した方法です。 documentation for Dialogを参照してください。 dispose()はダイアログオブジェクトを破棄します。

    あなたの推測は部分的に正しいと思われます。コンストラクタはダイアログを表示し、閉じられるまでブロックし、その後ダイアログを破棄します。しかし、これはJDialogではなくMyDialogの機能です

    +0

    dlgインスタンスが有効範囲外になるまで、ダイアログは破棄されません。そのため、ユーザーが[OK]ボタンを押した後にダイアログから値を取得することができます。ダイアログコンストラクタの行の後にも[キャンセル]ボタンのチェックが必要です。 –

    関連する問題