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