0

「モーダル」の小さなウィンドウを使用するアプリケーションがあります。このようなモーダル動作をシミュレートするには、それらを JFrames の拡張機能として定義し、メイン アプリケーション フレームを無効にし、デフォルトのクローズ操作を何もしないように設定します。これの問題は、JFrame が親を持つことができないため、ユーザーがウィンドウを閉じるように指示されたボタンをクリックすると、実際には閉じて、システムは最後に使用したアプリケーションに戻りますが、これは必ずしも望ましい効果ではありません (たとえば、ユーザーがモーダル ウィンドウを開き、Alt+Tab キーを押して別のアプリケーションに移動し、モーダル ウィンドウに戻ってそれを閉じると、私のメイン フレームではなく、この最後のアプリケーションが表示されます)。これを行う方法はありますか (JFrame を親などにバインドしますか?)。

4

2 に答える 2

2

を使わないのはなぜJDialogですか?:-)

于 2013-03-12T18:14:15.170 に答える
0

JFrame パラメーターをコンストラクターに追加して内部的に親として保存し、子の参照を親のリストに保存することができます。次に、dispose メソッドをオーバーライドして、ウィンドウを閉じる前にすべての子/親を閉じることができます。

例えば:

public class ParentWindow extends JFrame {

    //Here you add children when you create them
    List<JFrame> children = new ArrayList<JFrame>();

    @Override
    public void dispose() {
        for(JFrame f : children) {
            f.dispose();
        }
        super.dispose();
    }

    public void randomMethod() {
        JFrame newWindow = new JFrame(this);
        children.add(newWindow);
    }
}

public class ChildWindow extends JFrame {

    //Here you save the parent window
    JFrame parent;
    public ChildWindow(JFrame parent) {
         this.parent = parent;
    }

    @Override
    public void dispose() {
        parent.dispose();
        super.dispose();
    }
}
于 2016-04-17T17:47:14.393 に答える