我遇到JFrame的DefaultCloseOperation问题。我正在使用Netbeans。我已经在JFrame的属性窗口中将关闭操作设置为自定义代码。 每当我运行此JFrame时,自定义代码都会自动执行。即使我不关闭框架,自定义代码也基本上是一个函数:
public static int logout(){
int userconfirm= JOptionPane.showConfirmDialog(null,"Are you sure you want
to Exit?","Please Confirm",YES_NO_OPTION);
if(userconfirm==0){
return 1;
}
else
return 0;
}
我不知道关闭框架必须返回什么int值,我只是在做实验,所以我返回零或一。
答案 0 :(得分:0)
if(userconfirm==0){
首先,不要使用幻数。人们不知道“ 0”是什么意思。 API提供了JOptionPane.YES_OPTION
之类的变量供您使用。使用API提供的变量使代码更具可读性。
每当我运行此JFrame时,自定义代码都会自动执行。即使我不关闭框架,
您应该使用WindowListener监视窗口的关闭。基本逻辑如下:
JFrame frame = new JFrame(...);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
JFrame frame = (JFrame)e.getSource();
int result = JOptionPane.showConfirmDialog(
frame,
"Are you sure you want to exit the application?",
"Exit Application",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
frame.setVisible( true );
注意:由于关闭逻辑全部在侦听器内部处理,因此不需要方法。
有关更多信息和编码思路,请参见Closing an Application。