我刚学Java没几个星期,现在用java编了一个记事本,定义了一个窗口适配器类,当点击那个关闭窗口时,会弹出对话框,有保存,不保存,取消,但是点取消,窗口还是关闭了,不像点击菜单项的退出那样,点击取消还是会留在编辑区,这个怎么解决? ( 实现部分的代码和菜单项下的退出的实现代码一样)
下面是定义和实现的程序代码:
//定义一个窗口监听器
addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
exitForm(event);
}
});
//当应用程序关闭时被调用
private void exitWindow(WindowEvent event)
{
int n;
Object[] option = {"保存","不保存","取消"};
if(changed == true)
{
//打开对话框
n = JOptionPane.showOptionDialog(null,
"你的文件还没有保存,是否保存?",
"保存",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
option,
option[0]);
switch(n)
{
case JOptionPane.YES_OPTION:
{
doSave(fileName);//保存文件
System.exit(0);
}
case JOptionPane.NO_OPTION:
{
System.exit(0);
}
case JOptionPane.CANCEL_OPTION:
{
break;
}
}
}
}
下面是定义和实现的程序代码:
//定义一个窗口监听器
addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
exitForm(event);
}
});
//当应用程序关闭时被调用
private void exitWindow(WindowEvent event)
{
int n;
Object[] option = {"保存","不保存","取消"};
if(changed == true)
{
//打开对话框
n = JOptionPane.showOptionDialog(null,
"你的文件还没有保存,是否保存?",
"保存",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
option,
option[0]);
switch(n)
{
case JOptionPane.YES_OPTION:
{
doSave(fileName);//保存文件
System.exit(0);
}
case JOptionPane.NO_OPTION:
{
System.exit(0);
}
case JOptionPane.CANCEL_OPTION:
{
break;
}
}
}
}
{
public void windowClosing(WindowEvent event)
{
exitForm(event);//这里仅仅是执行了exitForm;而exitForm中并没有阻止窗口关闭的操作.,
});
{
break;
}//虽然你这里没有执行exit,但是windowClosing方法照样继续执行,关闭窗口状态并没有改变.
//
case JOptionPane.YES_OPTION:
{
doSave(fileName);//保存文件
System.exit(0);//把这句注释掉,选择Yes依然会关闭窗口
}
LZ在窗口构造函数里加上
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//在点击关闭时不做任何事,手动退出程序
这样就可以了