- ベストアンサー
JWindow、JFrameでモーダル化の方法
- JWindow、JFrameでJDialogと同等の処理をするにはどうすればいいですか?
- 親画面で操作不可にする方法と子画面でボタンが押下されるまで親画面の処理を停止する方法を教えてください。
- Javaバージョン1.4でJWindowとJFrameをモーダル化する方法について教えてください。
- みんなの回答 (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(); } }); } }
お礼
ソースコードの添付ありがとうございました。 参考にさせていただきます。