-2

次のような状況があります。一連の命令を実行し、別の JFrame2 にフォーカスを移してから再開するクラス JFrame1 があります。JFrame2 がフォーカスを取得すると、JFrame1 は、次の命令を実行するのではなく、JFrame2 が破棄することを想定する必要があります。何をすべきか?

JFrame1{
   //instruction 1
   //instruction 2
   // ....
   //instruction 6
   JFrame2 starts
   [waiting for results of JFrame2]
   //instruction 7
   //instruction 8}

JFrame1 は、フォーカスを再開するときに命令 7 と 8 を実行する必要があります。

4

4 に答える 4

3

通常、完全に独立していない限り、JFrame に別の JFrame を開始させることは適切ではありません。JFrame2 の代わりに JDialog を起動することをお勧めします。JDialog は JFrame と同じように使用され、すべてのコマンドは同じです。JDialog を起動する JFrame は、JDialog クラス内から this.dispose() が呼び出されて JDialog が破棄されるまで一時停止します。次に、次のようになります。

JFrame1 starts
instruction 1
instruction 2
...
instruction 6
JDialog (like JFrame2) starts
(JFrame1 waiting for JDialog to be disposed with this.dispose())
instruction 7
...
于 2013-02-18T17:17:59.513 に答える
0

現在、フレーム 2 が開いた直後に命令 7 と 8 が発生していることを意味していると思います。JFrame2 を閉じた後に命令 7 と 8 を実行するには、JFrame2 を JDialog または JOptionPane を使用してモーダル ダイアログにするか、次のように JFrame2 にリスナーをアタッチします。

frame2.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        // instruction 7
        // instruction 8
    }
});
于 2013-02-18T17:18:39.273 に答える
0

http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html#isFocusOwner()を見ることができます

HTH

于 2013-02-18T17:18:01.790 に答える