アプリケーションを一時停止せずにJInternalFrameでモーダルダイアログボックスを表示する

StackOverflow https://stackoverflow.com/questions/1420276

  •  07-07-2019
  •  | 
  •  

質問

JInternalFramesを使用するMDIアプリケーションがあります。各内部フレームは異なる操作を実行しますが、他のフレームの一部はJOptionPaneを使用してメッセージを表示します。これはもちろん、アプリケーション全体を一時停止します。

とにかく(JOptionPaneダイアログまたはその他のダイアログボックスが常に)OWN内部フレームに対してモーダルである(つまり、フレームXはメッセージを表示し、OWNフレームを一時停止するが、フレームYとその他の続行するアプリケーション)?

そして、コードを変更せずに(または少なくともほんの少しだけ)これを行うことは可能ですか?

役に立ちましたか?

解決

あなたが何を求めているかわかります。それは可能かもしれませんが、間違いなく簡単ではありません。モダリティを「ローカル」にしたい場合モーダルダイアログをポップアップしたJInternalFrameへ。

まず、モーダルポップアップには実際に2つの部分があり、自分で作成したもので近似できることを理解する必要があります。 1)ポップアップが閉じるまでモーダルポップアップブロックを設定するコード、および2)「背景」モーダルポップアップが表示されている間は、GUIイベントに応答しません。

真のモダリティは、現在のEDTをブロックし、モーダルコンポーネントの新しいイベントポンプを作成することでこれを実現します。 (java.awt.Container。#startLWModal()を参照)これは、すべてのJInternalFramesが1つのEDTを共有するため、機能しません。これは、Swingの動作方法(単一UIスレッド)の基本です

ただし、JInternalFrameはJRootPanesです。つまり、ガラスペインがあります。これを使用して、独自のモダリティを作成できます。アイデアは、各JInternalFrameのモーダルポップアップを、JInternalFrameにインストールされる透明なガラス板の中央に表示することです。マウスイベントを消費するマウスリスナーを透明なガラスペインに追加します。これにより、モダリティ機能#2が得られます(バックグラウンドが応答しないようです)。ブロックする代わりにオブジェクト指向を使用して、機能#1を取得します(モーダルポップアップにIModalPopupListener(これを作成しました-作成する必要があります)オブジェクトを取得して、モーダルポップアップが消えたときにコールバックします)。

これが理にかなっていることを願っています!がんばって!

他のヒント

これは有望に見えます:

モーダル内部フレームの作成

編集

コメントへの応答(リンク先ページから):

  

ただし、場合によっては   内部フレームにダイアログを表示したい   モーダルである。このTech Tipでは、   モーダルダイアログを作成する方法   内部フレーム。

まさにあなたが探しているものではありませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top