在关闭窗口时怎样截获事件提示窗口是否该关闭!(60分)

  • 主题发起人 主题发起人 lishaoming
  • 开始时间 开始时间
L

lishaoming

Unregistered / Unconfirmed
GUEST, unregistred user!
我用下面这段程序截获关闭的事件,然后调用对话框提示用户是否关闭窗口。可是我用下面的程序实现时,不管按“yes”还是“no”都关闭窗体,为什么。
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int nRet = JOptionPane.showConfirmDialog(e.getWindow(), "Are you sure?",
"Test", JOptionPane.YES_NO_OPTION);
if ( nRet == JOptionPane.YES_OPTION)
{
System.exit(0);
}
else
{

}
}
=========================================================================
°★°∴°°∴ ☆°.·★°∴°.
◢◣ ◢◣
◢★◣ ◢★◣
◢■■◣ ◢■■◣
◢■■■◣ ◢■■■◣
☆°★°∴°°∴ ☆°.·★°∴°.☆°★°∴°°∴ ☆°.·★°∴°.☆°★°∴°°∴ °★.☆° .★·°∴°★.°·∴°☆ ·
给你的 祝你新年快乐
一年365日都开心,8760小时快乐,525600分钟精彩
 
是啊,我也刚做过试验了,结果也就这样(窗口被关闭了,但是程序没有结束?)。可是JDK文档上面写的:
public void windowClosing(WindowEvent e)
Invoked when the user attempts to close the window from the window's system menu. If the programdo
es not explicitly hide or dispose the window while processing this event, the window close operation will be cancelled.
 
要知道改框架不是关闭,而是hide了,因为DefaultCloseOperation是 HIDE_ON_CLOSE
,如果要自己判断关闭,首先要设置 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE)
这些变量在WindowConstants里头定义的,
 
我不明白,为何我在里面显式调用 show() 或者 setVisible(true) 没有能显示Frame?
调用notify() 能显示,不过好像是因为出现了异常:java.lang.IllegalMonitorStateException: current thread not owner
我做的实验如下:
import javax.swing.*;
import java.awt.event.*;
public class TestWindow{
JFrame frame;

public TestWindow(){
frame = new JFrame("TestWindow");
// frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
JFrame f = (JFrame)we.getSource();
if (JOptionPane.showConfirmDialog(f, "确认关闭?") == 0)
System.exit(0);
else
{
f.setVisible(true);
// f.show();
// f.notify();
// try { f.notify();
} catch (Exception e){}
}
}
});
frame.setVisible(true);
}

public static void main(String[] args){
new TestWindow();
}
}

既然是 hide 了,为何调用show() 或者 setVisible(true) 不显示?
 
>>> paulorwys:
我家上了这句,
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
然后在 windowClosing()判断 还是不管用,到底为什么呀!也感谢大家的支持!
 
》》》》paulorwys:
行了,是我写错了,加上就行了。非常感谢!
你一杯咖啡聊表心意!
_..,----,.._
.-;'-.,____,.-';
(( | |
`)) ;

` / /
.-' `,.____.,' '-.
( '------' )
`-=..________..--'
 
接受答案了.
 
楼主等阵,我想既然是hide了,为何我在 windowClosing() 事件里面
Window win = we.getWindow();
win.dispatchEvent(new WindowEvent(win, WindowEvent.WINDOW_ACTIVATED, null));
没效果,换成 WindowEvent.WINDOW_GAINED_FOCUS 、WindowEvent.WINDOW_CLOSED也不会关闭窗口,只有 WindowEvent.WINDOW_CLOSING 会导致不断的触发该事件?
我对awt的事件机制很不了解,谁可以给我说说这是怎么回事?
 
后退
顶部