電子書籍の厳選無料作品が豊富!

はじめまして。
モーダレスダイアログについて質問がございます。フレーム(JFrame 継承)から、このフレームを所有者とするモーダレスダイアログ(JDialog 継承)を表示した状態で、マウスクリックによりフレームをアクティブにした場合、フレームは背面に表示されたままとなりますが、このフレームをダイアログの前面に表示させることは可能でしょうか?ご存知の方がいらっしゃいましたらご教授願います。尚、下記にサンプルソースを記載します。

■環境
 OS:WinXP
 java:j2sdk1.4.2_08

※ダイアログ生成時に所有者を指定しなければ、フレームをダイアログ前面に表示させることが可能ですが、この方法だと再度モーダレスダイアログをアクティブにした場合、上記とは別インスタンスのフレームから表示されたモーダレスダイアログも連動して前面に表示されるという事象を確認しております。

public class ParentFrame extends JFrame
implements ActionListener {
public static void main(String[] args) {
ParentFrame frame = new ParentFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public ParentFrame() {
super("親フレーム");
setSize(300, 200);
setLocationRelativeTo(null);
JButton btn = new JButton("ダイアログ表示");
btn.addActionListener(this);
getContentPane().add(btn);
}
public void actionPerformed(ActionEvent e) {
// モーダレスダイアログ生成
JDialog dlg = new JDialog(this, "子ダイアログ");
dlg.setSize(200, 100);
dlg.setLocationRelativeTo(this);
dlg.setVisible(true);
}
}

A 回答 (2件)

JDialogはダイアログとしての性格上、常に前面表示のようですね。


owner指定が重要なら、JWindowを使ってみては?
JWindow(Frame owner)
というコンストラクターがあります。

この回答への補足

サンプルソースの JDialog を JWindow に変更して試してみました。やはりフレームはウインドウの前面に表示されませんでした。ちなみに、JWindow でもタイトルバーを表示させることは可能なのでしょうか?

補足日時:2006/12/24 02:22
    • good
    • 0

こんにちは。



[特徴]
フレーム = 親ウィンドウを持たないウィンドウ
ダイアログ = 親ウィンドウを持つウィンドウ ※親ウィンドウの背面に隠れることはできない

[要求]
親ウィンドウの背面に隠したい



以上のように考えると、フレームを使えば良いのでは?
と思いますが、JDialogでなければいけない理由などがあるのでしょうか?

// モーダレスダイアログ(フレームによる実装)生成
JFrame dlg = new JFrame("子ダイアログ");

この回答への補足

おっしゃるとおり、フレームを使用すれば今回の問題は解決できます。但し、フレームから表示される子画面は JDialog を継承したものでないといけないという実装上のルールがある為、ダイアログで実現可能であるか調査しているところです。ダイアログ生成時に所有者を指定しなければフレームをダイアログの前面に表示させることが可能であることまでは分かっている為、何かしらの処理を施せばダイアログ生成時に所有者を指定してもフレームをダイアログの前面に表示させることが可能ではないかと考えました。

補足日時:2006/12/24 01:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!