很久没有用过界面编程了,就当复习一下了,哈哈
如一楼所说的,给按钮加一个监听器ActionListener,写一个实现方法
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Close extends JFrame implements ActionListener{
JButton close;
public Close(){
close = new JButton("close");//增加一个按钮
add(close);
close.addActionListener(this);//给按钮增加一个监听器
setLayout(new FlowLayout());
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
//关闭整个应用程序.如果只是是想关闭当前窗口,可以用
//dispose();
System.exit(0);
public static void main(String[] args){
new Close();
单独显示Dialog略奇怪,所以我用JFrame做例子,原理是一样的
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class DummyTest {
public static void main(String[] args) {
final JFrame frame = new JFrame();
final Thread thread = new Thread(new Runnable() {
public void run() {
while (true) {
try {
frame.dispose();
return;
} catch (InterruptedException e) {}
});
frame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
thread.interrupt();
frame.setVisible(true);
thread.start();
你用的 swing 吗?加上 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
或者加上窗口事件监听器:
addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent we) {
dispose();
效果图
你想要触发的是窗口关闭事件windowClosed, 那么你需要调用dispose方法,对窗口进行销毁.
修改代码如下
public?void?windowClosing(WindowEvent?e)?{
System.out.println("windowClosing--窗体正在关闭事件");
//f.setVisible(false);//隐藏窗口
f.dispose();//销毁窗口--这行代码会触发windowClosed事件
还有其他一些细节的修改,参考下面的代码
import?java.awt.*;
import?java.awt.event.*;
//类名不要写一个小写字母,推荐写一个完整的名词来作为类名
public?class?EventDemo?{
public?static?void?main(String[]?args)?{
Frame?f?=?new?Frame("hello");
//f.setVisible(true);//不要先显示窗口,?先显示了窗口,就看不到"窗口打开事件"了
f.addWindowListener(new?WindowListener()?{
@Override
public?void?windowOpened(WindowEvent?e)?{
System.out.println("windowOpened--窗体打开事件");
public?void?windowIconified(WindowEvent?e)?{
System.out.println("windowIconified--窗体图标化事件");
public?void?windowDeiconified(WindowEvent?e)?{
System.out.println("windowDeiconifie--窗体取消图标化事件");
public?void?windowDeactivated(WindowEvent?e)?{
System.out.println("windowDeactivated--窗体停用事件");
f.dispose();//销毁窗口
public?void?windowClosed(WindowEvent?e)?{
System.out.println("windowClosed--窗体关闭事件");
public?void?windowActivated(WindowEvent?e)?{
System.out.println("windowActivated--窗体激活事件");
f.setVisible(true);//窗口显示
①. package applicationGraphicsInOut;
①.0 }
①.1 class FrameInOut extends Frame implements ActionListener
该程序在Eclipse下运行通过,但是就是不能关不掉!
什么原因呢?
其中有以下几种解决方法:
把main函数改为如下
①. public static void main(String args[])
①.0 });
①.1
这种方法我有点不解,addWindowListener()括号里是怎么回事,我有点纳闷,我还没见过这样的形式,不过我猜可能是实现了java.awt.event.WindowAdapter()类里面的一个抽象方法windowClosing(),但是我真没有见过这种格式,求解释.
在FrameInOut()构造函数里面添加监听函数,添加监听函数之后构造函数如下:
FrameInOut()
{
super("图形界面的Java Application程序");
prompt=new Label("请输入您的名字");
addWindowListener(new HandleWin()); //添加监听函数,引发WindowEvent事件
add(prompt);
add(input);
add(output);
input.addActionListener(this);
其中HandleWin()为内部类,主要实现WindowListener借口,添加监听之后会引发WindowEvent类代表的所以七中事件,具体情况如下:
(1)WINDOW_ACTIVATED:代表窗口被激活(在屏幕的最前方待命).
在WindowEvent类的主要方法有:
public window getWindow();
此方法返回引发当前WindowEvent事件的具体窗口对象,与getSource()方法返回的是相同的事件引用.
HandleWin定义如下:
class HandleWin extends WindowAdapter
public void windowClosing(WindowEvent e)
(e.getWindow()).dispose();
HandleWin是窗口事件的裁剪类WindowAdapter的子类,重载了WindowClosing()方法.
当然也可以这样写HandleWin
①. class HandleWin implements WindowListener
①.0 public void windowActivated(WindowEvent arg0) {
①.1 // TODO Auto-generated method stub
JFrame的关闭不像Frame,点关闭按钮自己会关闭,但是那样做不好.可以用setDefaultCloseOperation(int operation);
其中operation有以下几种
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的 WindowListener 对象的 windowClosing 方法中处理该操作.
HIDE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册的 WindowListener 对象后自动隐藏该窗体.
DISPOSE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体.
EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程序.仅在应用程序中使用.
默认情况下,该值被设置为 HIDE_ON_CLOSE.更改此属性的值将导致激发属性更改事件,其属性名称为 "defaultCloseOperation".
以上就是土嘎嘎小编为大家整理的java代码自动关闭窗体相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!