- PR -

Swing JInternalFrameからJDialogの表示

投稿者投稿内容
ビーンズ
常連さん
会議室デビュー日: 2007/10/02
投稿数: 20
投稿日時: 2007-10-02 16:36
すみません。
Java経験一年の初心者です。
投稿は今回が初めてです。
質問内容に不手際があるかもしれませんが、
ご教授願います。

現在Swingアプリを作成中です。
JDeskTopPanelとJInternalFrameを使ったMDI方式のアプリケーションです。

【環境】
 JDK 1.4.2
 IDE NetBeans

【動作概要】
 DeskTopPanelA −表示→ InternalFrameA −ダイアログ表示→ DialogA

InternalFrameを表示するところまでは進んだのですが、
InternalFrameからJDialogを表示することができず、悩んでいます。
方法が間違っているのか不可能なのかすらわかりません。

 現状は下記の通りです。

  JDialog_A jdA = new JDialog_A(this,true);
  ↑第一引数がコンパイルエラー
  jdA.show();

当然ながら、上記コードでは
JDialogのインスタンス作成時部でコンパイルエラーになります。
しかしながら同対処してよいのか検討がつきません。
どなたかご教授お願いします。








[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-15 15:55 ]
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-10-02 21:18
まずはAPIと照らし合わせて コンパイルをとおるようにしましょう。

コンパイルエラー内部のメッセージを検索すれば大体は解決するでしょうに。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-10-02 22:08
引用:

ビーンズさんの書き込み (2007-10-02 16:36) より:
 現状は下記の通りです。

  JDialog_A jdA = new JDialog_A(this,true);
  ↑第一引数がコンパイルエラー


ちゃんと確かめてはいませんが、JInternalFrame はハリボテのような仮想的なフレームなので、それを Frame や Window のようには扱えないのだと思います。JInternalFrame の親にあたるような Frame や Window を JDialog のコンストラクターの引数に渡すことではダメでしょうか。

上述のように JInternalFrame は、本当の Frame ではないので、どうしてもそういう制限はいろいろと出てくると思います。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ビーンズ
常連さん
会議室デビュー日: 2007/10/02
投稿数: 20
投稿日時: 2007-10-04 11:45
TO:朝日奈ありすさん
回答ありがとうございます。

>まずはAPIと照らし合わせて コンパイルをとおるようにしましょう。
>
>コンパイルエラー内部のメッセージを検索すれば大体は解決するでしょうに。

おっしゃる通りですが、私が知りたいのは”コンパイルを通す”ということではなく、
”InternalFrame”の概念・位置づけです。
私の質問が言葉足りなかったようです。すみませんでした。

TO:unibonさん
回答ありがとうございます。

>上述のように JInternalFrame は、本当の Frame ではないので、どうしてもそういう
>制限はいろいろと出てくると思います。

InternalFrameとFrameをほぼ同等のものと考えていましたが、
そうではないようですね。

いろいろと制限があるのであれば、今後の開発にも影響しそうです。
そもそも推奨されないMDI形式で開発していることを、
再度考え直してみることにします。
回答ありがとうございました。

[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-15 15:56 ]
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2007-10-04 12:28
そもそもJDialogのnewするときに第一引数がJDialogがJFrameかのところに
JInternalFrameを渡しているところがおかしいことに気付いてらっしゃるのでしょうか?

親ウィンドウがあるはずでそこのインスタンスを渡せばいいだけでしょうに、、

簡単なのはSwingUtilitiesクラスのgetWindowAncestorが汎用的に使えます。
コード:
Windows win = SwingUtilities.getWindowAncestor(this);
if ( win != null && win instanceof JDialog ) {
    JDialog_A jdA = new JDialog_A( ( JDialog )win, true );
} else if ( win != null && win instanceof JFrame ) {
    JDialog_A jdA = new JDialog_A( ( JFrame )win, true );
} else {
    JDialog_A jdA = new JDialog_A( null, true );
}

ビーンズ
常連さん
会議室デビュー日: 2007/10/02
投稿数: 20
投稿日時: 2007-10-04 17:27
TO:いっきゅうさん
回答ありがとうございます。

>そもそもJDialogのnewするときに第一引数がJDialogがJFrameかのところに
>JInternalFrameを渡しているところがおかしいことに気付いてらっしゃるのでしょう
>か?

もちろん気づいてます。IDEで見ればすぐに理解できます。
確かに親ウィンドウを取得できれば、それを使ってダイアログのインスタンスは
作れます。
問題なのは、質問の通り、
>InternalFrameからJDialogを表示することができず、悩んでいます。
ということです。つまり、MDIの子ウィンドウからダイアログを表示したい
ということです。

上記方法だと、親Frameよりダイアログが出力されるので、
DeskTopPanelからはみ出してダイアログ表示されてしまいます。
MDI方式でアプリを作成しているわけですから、DeskTopPanel内に
ダイアログを表示したいということになります。

言葉足りずに伝わりづらい部分があったと思います。申し訳ありません。

[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-15 15:57 ]
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2007-10-05 08:25
> MDI方式でアプリを作成しているわけですから、DeskTopPanel内に
> ダイアログを表示したいということになります。

その場合だと、JDialogクラスでは表示はできないかと思います。

要件にあうダイアログ自体は、JOptionPaneの
showInternalConfirmDialog
showInternalInputDialog
showInternalMessageDialog
showInternalOptionDialog
で表示することは可能です。

このダイアログの引数のメッセージ部分をStringでなく、
Componentオブジェクトにすれば、ユーザー自作で
ダイアログの内部を作りこめます。

ビーンズ
常連さん
会議室デビュー日: 2007/10/02
投稿数: 20
投稿日時: 2007-10-05 11:26
TO:いっきゅうさん
回答ありがとうございます。
返答遅れまして申し訳ありません。

最初の質問内容に説明不足が感じられました。すみません。

私が実現したいこと(理想)は、
 DeskTopPanel −表示→ InternalFrameA 
  −表示(普通orダイアログ)→ InternalFrameB −表示(普通orダイアログ)→     InternalFrameC ・・・・・
のようなことです。
上記のInternalFrameA〜Cは部品化された一機能と考えてください。
A〜Cの呼び出し順に制限はありません。
そして、状況に応じて表示方法を普通orダイアログ形式で出力したいと考えています。
(.Netで言うならば、Show()とShowDialog()みたいなイメージです。)

機能ごと(A〜C)は汎用性のあるものにしたいので、できる限りJDialogやJOptionPaneに
限定せずに、InternalFrameに統一し、表示処理にて普通かダイアログかを制御したいと考えています。

現在は、DeskTopPaneを各InternalFrameで持ちまわして、
DeskTopPane.add(InternalFrame)している状況です。
確かにA〜Cを順不同に表示することはできていますが、Dialogのように
呼び出し元(親フレーム)を選択不可にすることができずに行き詰っています。

最初の質問内容からだいぶ議題がそれてしまいました。
二転三転してしまいましたが、回答願います。



[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-05 11:31 ]

[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-05 11:31 ]

[ メッセージ編集済み 編集者: ビーンズ 編集日時 2007-10-15 15:57 ]

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