`
xxqn
  • 浏览: 73728 次
  • 性别: Icon_minigender_1
  • 来自: 广东韶关
社区版块
存档分类
最新评论

捕捉JDialog的关闭事件

阅读更多
JDialog的关闭事件是什么?
问了几个群,网上也找了好久都没有正确答案,还是靠自己吧。下面是我的测试代码:
	public class EditJDialog extends javax.swing.JDialog implements WindowListener{
		

		public EditJDialog(Frame owner, boolean modal) {
			super(owner, modal);

			setSize(800, 600);
			setVisible(true);
			//setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			this.addWindowListener((WindowListener) this);
		}

		@Override
		public void windowActivated(WindowEvent e) {
			System.out.println(0);
			
		}

		@Override
		public void windowClosed(WindowEvent e) {
			// TODO Auto-generated method stub
			System.out.println(1);
		}

		@Override
		public void windowClosing(WindowEvent e) {
			// TODO Auto-generated method stub
			System.out.println(2);
		}

		@Override
		public void windowDeactivated(WindowEvent e) {
			System.out.println(3);
		}

		@Override
		public void windowDeiconified(WindowEvent e) {
			// TODO Auto-generated method stub
			System.out.println(4);
		}

		@Override
		public void windowIconified(WindowEvent e) {
			// TODO Auto-generated method stub
			System.out.println(5);
		}

		@Override
		public void windowOpened(WindowEvent e) {
			// TODO Auto-generated method stub
			System.out.println(6);
		}


	}

点击关闭按钮,结果是3。可以推定对应的事件是windowDeactivated,而不是网上所说的windowClosing。
哪位给个评论,为何网上说的与我的实验会不同?
分享到:
评论
4 楼 shareal 2013-11-07  
覆写processWindowEvent之后,在里面将窗口dispose,可以不调用this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

从调用顺序上来说EventQueue先调用dispatchEventImpl->processEvent,再调用窗口注册的事件
比如如下情况,窗口已经关闭了。
        this.addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowDeactivated(WindowEvent e)
            {
                 // do something               
            }
        });
    }

所以需要优先覆写processEvent
3 楼 ErinToJerry 2013-04-22  
我试了一下,是windowClosing啊。。。。而且windowDeactivated不仅仅会在窗口关闭的时候被调用,还有很多种情况。。。
2 楼 hilly 2010-06-30  
这个问题你可以测试一下:
当继承JFrame类,关闭时的事件,应该是WindowEvent.WINDOW_CLOSING
//override JFrame 的方法
	protected void processWindowEvent(WindowEvent e) {
		if (e.getID() == WindowEvent.WINDOW_CLOSING) {
			if (JOptionPane.showConfirmDialog(this, "确实要关闭?", "确认", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { 
				System.exit(0);
			} else {
			}
		} else {
			super.processWindowEvent(e);
		}
	}

相关推荐

Global site tag (gtag.js) - Google Analytics