• 締切済み

モーダレスダイアログについて

はじめまして。 モーダレスダイアログについて質問がございます。フレーム(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); } }

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

JDialogはダイアログとしての性格上、常に前面表示のようですね。 owner指定が重要なら、JWindowを使ってみては? JWindow(Frame owner) というコンストラクターがあります。

quwa
質問者

補足

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

  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんにちは。 [特徴] フレーム = 親ウィンドウを持たないウィンドウ ダイアログ = 親ウィンドウを持つウィンドウ ※親ウィンドウの背面に隠れることはできない [要求] 親ウィンドウの背面に隠したい ↓ 以上のように考えると、フレームを使えば良いのでは? と思いますが、JDialogでなければいけない理由などがあるのでしょうか? // モーダレスダイアログ(フレームによる実装)生成 JFrame dlg = new JFrame("子ダイアログ");

quwa
質問者

補足

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

関連するQ&A