- PR -

Swing JInternalFrameからJDialogの表示

投稿者投稿内容
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2007-10-05 21:50
要件として
・1つのDeskTopPanelの中で複数の内部モーダルダイアログ形式、
 内部ウインドウ形式で表示したい。
・表示内容は部品化された各々を使い、表示形式を選択することで上記形式で表示したい。
・モーダルダイアログ時は、親の表示内容は触れないようにしたい。
という事ですね?

で結論からいうとそんなAPIは無いから自分で作るしかないと思います。

で実現するには、JInternalFrameのサブクラスを作り上記要件を満たせばいいかと思います。
ざっと、必要条件を見て、以下のようなもので実際できました。
1.表示用のメソッドを作る。
 ・JDeskTopPanelにAddする前から作る。(setLayerはAddする前有効だから)
 ・モーダル時は、setLayer(JDesktopPane.MODAL_LAYER)を使えばいいでしょう。
 ・親の内部ウインドウからgetComponents()で再起的に取り出し、setEnabled(false)
  で無効化する。

2.クローズイベントを作る。
 ・addInternalFrameListener(InternalFrameListener l)
 ・モーダルウインドウ表示後の閉じたときに無効化したものを逆の手順で有効化する。

※ここで問題は、2のクローズ時に親の内部ウインドウが取れない。
 全ての内部フレームの親は、JDesktopPaneとなるため。
 よって、サブクラスに親の内部ウインドウのインスタンスを保持するフィールドを作る。
 又、モーダルかそうでないかのフラグも作る。
 これらは、1.の表示時にセットする。

ここまで手間をかけるのと最低限実現したい機能との天秤になると思いますが
頑張って見てください。
ビーンズ
常連さん
会議室デビュー日: 2007/10/02
投稿数: 20
投稿日時: 2007-10-31 19:03
TO:いっきゅうさん

 まず、回答が非常に遅くなり、大変申し訳ありませんでした。

 貴重な時間を割いてまで、かなり詳しい回答をしていただき
 ありがとうございます。

>要件として・・・・
>という事ですね?

 はい。

>APIは無いから自分で作るしかないと思います。

 とても残念ですが、自作しかないようですね。
 時間に余裕がないので、今までの議論が元も子もなくなってしまいますが、
 設計の見直しという方向にしたいと思います。

いままで回答いただきありがとうございました。
別の案がある場合は、引き続きアドバイスお願いします。
 
 

スキルアップ/キャリアアップ(JOB@IT)