问题描述
- Java中窗口关闭事件。
-
程序代码如下:
package com.packageTemp;import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MouseAdapterTest {
JFrame f=null; JButton btn=null; public static void main(String[] args) { new MouseAdapterTest(); } //构造函数 public MouseAdapterTest() { f=new JFrame("Test"); btn=new JButton("按钮1"); //添加监听事件 btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("action ok"); } }); btn.addMouseListener(new MouseAdapter(){ int count=1; public void mouseEntered(MouseEvent e){ System.out.println("鼠标进入了按钮区域"+count++); } public void mouseExited(MouseEvent e) { System.out.println("鼠标离开了按钮区域"+count++); } }); f.add(btn); f.setBounds(100, 200, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 此行是重点 f.setVisible(true); }
}
如代码所示:如果我写上f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,则点击右上角的X时,可以关闭窗口,并且程序停止运行。
但是我好奇的是,为什么我没有写窗体监听事件,即WindowListener,为什么点击X,图形化界面依旧可以X掉。
求大神指点
解决方案
首先点击窗口的关闭按钮X会触发点击X按钮的点击事件或者也称窗口关闭按钮事件,JFrame系统中原有的程序肯定也类似于注册了窗口关闭监听事件,在监听事件的处理程序中会依据你的配置(类似你的f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);)进行处理,也就是关闭了程序。当然你也可以注册类似的事件监听程序(窗口关闭事件)。你也可以在你注册的监听程序中处理点击X按钮操作,但处理完之后也还是会运行JFrame系统中原有的X按钮监听程序,除非你在你注册的监听程序中直接结束了程序的运行。
解决方案二:
jframe是自带关闭功能的,,,
解决方案三:
例如;我启动一个frame1后,通过事件响应启动了第二个frame2,当我点击窗口上的X按钮关闭,只退出第二个frame,第一frame不关闭!
默认都是使用EXIT_ON_CLOSE,改成DISPOSE_ON_CLOSE即可
+++++++++++++++......
答案就在这里:java窗口关闭事件
解决方案四:
明白了,是IDE自带功能么?
解决方案五:
默认你点右上角的X是隐藏了该窗口,你想要点X立即退出的话,调用
JFrame frame = new yourFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这一行就是将窗体修改为点击X立即退出程序的语句
frame.setVisible(true);
解决方案六:
JFrame不用设置,自带关闭功能。
解决方案七:
JFrame不用设置,已经实现了关闭功能。
解决方案八:
Frame 就要自己实现
解决方案九:
希望能帮助你解除疑惑