1. 程式人生 > >java 模式對話方塊與非模式對話方塊的比較

java 模式對話方塊與非模式對話方塊的比較

  1. package com.zhao.myDlg;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. publicclass Myframe {
  5. publicstaticvoid main(String argv[]) {
  6. final Frame f1 = new Frame();
  7.         Button b1 = new Button("click");
  8.         f1.add(b1);
  9.         f1.setSize(400400);
  10.         f1.setVisible(true);
  11.         f1.pack();
  12.         b1.addMouseListener(
    new MouseAdapter() {
  13. publicvoid mouseClicked(MouseEvent e) {
  14. final Dialog d = new Dialog(f1, "dialog"true);
  15. //final Dialog d = new Dialog(f1, "dialog", flase);
  16.                 d.setSize(800600);
  17. //d.setVisible(true);
  18.                 d.addWindowListener(new WindowAdapter() {
  19. publicvoid windowClosing(WindowEvent evt) {
  20.                         d.setVisible(false);
  21.                     }
  22.                 });
  23.                 d.setVisible(true);
  24.             }
  25.         });
  26.         f1.addWindowListener(new WindowAdapter() {
  27. publicvoid windowClosing(WindowEvent evt) {
  28.                 System.exit(0);
  29.             }
  30.         });
  31.     }
  32. }

比較模式對話方塊與非模式對話方塊
模態的就是始終最前,阻塞別的執行緒直至對話方塊執行緒結束
你可以在構造的時候用:JDialog(Dialog owner, String title, boolean modal)
如果你是extends   JDialog ;有了自己的建構函式;
可以在自己的建構函式呼叫父類即是JDialog的建構函式來實現,定義模式非模式;
呼叫方法 super(adminUI,   "新增職員帳戶",   true);  
也可以構造完之後呼叫public void setModal(boolean b)

1.非模式對話方塊(false) +  d.setVisible(true);在d.addWindowListener前
這樣click後彈出的非模式對話方塊可以關閉
2.模式對話方塊(true) + d.setVisible(true);在d.addWindowListener前
這樣click後彈出的非模式對話方塊不可以關閉
3.模式對話方塊(true) + d.setVisible(true);在d.addWindowListener後
這樣click後彈出的非模式對話方塊可以關閉
總結:
System.exit(0); 退出程式  
 d.setVisible(false); 隱藏不可見
對於模式對話方塊,setVisible或者show以後,是被blocked掉的,
也就是這之後的addWindowListener根本不會執行,知道對話方塊被關閉。 
而addWindowListener不被執行的話,對話方塊是不會被關閉的。
所以你的程式就永遠關不了。
把 addWindowListener放在setVisible之前就行了。