• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JWindow、JFrameでモーダル化の方法)

JWindow、JFrameでモーダル化の方法

このQ&Aのポイント
  • JWindow、JFrameでJDialogと同等の処理をするにはどうすればいいですか?
  • 親画面で操作不可にする方法と子画面でボタンが押下されるまで親画面の処理を停止する方法を教えてください。
  • Javaバージョン1.4でJWindowとJFrameをモーダル化する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

//何の検証もない、"信頼できない"コードを書いてみました。 //どこまで正しいのかわからないので、 //仕事には使いたくない感じですが。 import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; class MyEQ extends EventQueue{ public void d(AWTEvent e){dispatchEvent(e);} } public class Demo implements ActionListener{ boolean blocking;static Frame f; static MyEQ myEQ=new MyEQ(); {Toolkit.getDefaultToolkit().getSystemEventQueue().push(myEQ);} public static void main(String[] args){ f=new Frame("Main Frame"); Button b=new Button("モーダルダイアログ表示"); b.addActionListener(new Demo());f.add(b); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.pack();f.setVisible(true); } public void actionPerformed(ActionEvent e){ System.out.println("start"); modalStart(); System.out.println("end"); } private void eventPump(){ AWTEvent event=null; while(blocking){ try{event=myEQ.getNextEvent();}catch(Exception e){} myEQ.d(event); } } private void modalStart(){ MyDialog d=new MyDialog("モーダルダイアログ",this); f.setEnabled(false);d.setVisible(true); blocking=true;eventPump(); } void modalEnd(){ blocking=false;f.setEnabled(true); } } class MyDialog extends Frame{ Demo demo; MyDialog(String title,Demo demo){ super(title); this.demo=demo; Button b=new Button("(^^)"); b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("(^^)"); } }); add(b);pack(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { MyDialog.this.demo.modalEnd();dispose(); } }); } }

siina_k
質問者

お礼

ソースコードの添付ありがとうございました。 参考にさせていただきます。

関連するQ&A