如何正确关闭GUI图形用户界面程序?我们先来看一个最简单的例程。
JFrame是一个框架窗体(顶层的容器组件),例程CenterLocationFrame.java先自定义了一个继承自JFrame的框架窗口,然后设置窗口的首选大小,再设置框架窗口显示于屏幕中间。JFrame默认大小其长和宽都是0,如果不设置窗口的首选大小或窗口的size,将只显示窗口标题栏。此框架窗口自动包含窗口最大化、最小化和窗口关闭的功能。框架窗口默认是不可见的,调用setVisible(true)方法才能显示窗口。
下面这行代码定义了窗体的默认关闭操作,其中EXIT_ON_CLOSE是JFrame中定义的常量,表示退出并关闭窗体。
setDefaultCloseOperation(EXIT_ON_CLOSE);
假如没有这行代码,程序看上去也很正常,而且点击窗口右上的窗口关闭按钮,程序窗口也会关闭。但是实质上程序却没有正常退出,只是隐藏了窗口,还在后台执行,相关资源也未释放。
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.*;
public class CenterLocationFrame extends JFrame {
public CenterLocationFrame(String title,int w,int h) {
setTitle(title);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();//屏幕范围
int screenWidth = screenSize.width; //屏幕宽度
int screenHeight = screenSize.height; //屏幕高度
//设置框架窗口的最优大小
setPreferredSize(new Dimension(w, h));
setLocation((screenWidth-w)/2, (screenHeight-h)/2); //居中
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
int w=340, h=100;
new CenterLocationFrame("窗口居中例程",w,h);
}
}
这个程序当用户点击窗体右上角的关闭按钮时,程序直接退出并关闭窗体。
如果我们要在程序退出前做一些特殊处理,则程序要这样修改:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class CenterLocationFrame extends JFrame {
public CenterLocationFrame(String title,int w,int h) {
setTitle(title);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();//屏幕范围
int screenWidth = screenSize.width; //屏幕宽度
int screenHeight = screenSize.height; //屏幕高度
//设置框架窗口的最优大小
setPreferredSize(new Dimension(w, h));
setLocation((screenWidth-w)/2, (screenHeight-h)/2); //居中
//setDefaultCloseOperation(EXIT_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 窗口关闭前,在这里实现要处理的操作
super.windowClosing(e);
}
});
pack();
setVisible(true);
}
public static void main(String[] args) {
int w=340, h=100;
new CenterLocationFrame("窗口居中例程",w,h);
}
}
程序中给窗体注册了一个匿名的WindowAdapter()来实现具体功能。
更多的关闭程序窗口方法,请参考网友的博客:
java关闭窗口的6种方法