java 模式對話方塊與非模式對話方塊的比較
阿新 • • 發佈:2019-01-29
- package com.zhao.myDlg;
- import java.awt.*;
- import java.awt.event.*;
- publicclass Myframe {
- publicstaticvoid main(String argv[]) {
- final Frame f1 = new Frame();
- Button b1 = new Button("click");
- f1.add(b1);
- f1.setSize(400, 400);
- f1.setVisible(true);
- f1.pack();
- b1.addMouseListener(
- publicvoid mouseClicked(MouseEvent e) {
- final Dialog d = new Dialog(f1, "dialog", true);
- //final Dialog d = new Dialog(f1, "dialog", flase);
- d.setSize(800, 600);
- //d.setVisible(true);
- d.addWindowListener(new WindowAdapter() {
- publicvoid windowClosing(WindowEvent evt) {
- d.setVisible(false);
- }
- });
- d.setVisible(true);
- }
- });
- f1.addWindowListener(new WindowAdapter() {
- publicvoid windowClosing(WindowEvent evt) {
- System.exit(0);
- }
- });
- }
- }
比較模式對話方塊與非模式對話方塊
模態的就是始終最前,阻塞別的執行緒直至對話方塊執行緒結束
你可以在構造的時候用: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之前就行了。