Java关闭窗体的六种方法
### Java关闭窗体的六种方法详解 在Java中,我们经常会遇到需要处理窗口关闭的情况。例如,在用户尝试关闭窗口时执行某些清理操作或者退出应用程序等。本文将详细介绍六种在Java中关闭窗体的方法,并对每种方法进行详细的解释。 #### 方法一:通过`JFrame`使用`enableEvents`和`processWindowEvent` 这种方法适用于`JFrame`类。通过调用`enableEvents`方法并传入`AWTEvent.WINDOW_EVENT_MASK`参数来启用窗口事件处理。然后重写`processWindowEvent`方法来监听窗口关闭事件。当检测到`WINDOW_CLOSING`事件时,可以通过调用`System.exit(0)`来关闭应用程序。 **代码示例:** ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Frame1 extends JFrame { public Frame1() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); this.setSize(new Dimension(400, 300)); this.setTitle("Frame1"); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } } ``` #### 方法二:实现`WindowListener`接口 此方法需要创建一个类并实现`WindowListener`接口。然后在这个类中实现`windowClosing`方法来处理窗口关闭事件。之后将这个监听器添加到窗口对象上。 **代码示例:** ```java import java.awt.*; import java.awt.event.*; public class Frame1 extends Frame implements WindowListener { public Frame1() { this.setSize(new Dimension(400, 300)); this.setTitle("Frame1"); this.addWindowListener(this); } public void windowClosing(WindowEvent windowEvent) { System.exit(0); } // 其他未实现的方法 public void windowOpened(WindowEvent windowEvent) {} public void windowClosed(WindowEvent windowEvent) {} public void windowIconified(WindowEvent windowEvent) {} public void windowDeiconified(WindowEvent windowEvent) {} public void windowActivated(WindowEvent windowEvent) {} public void windowDeactivated(WindowEvent windowEvent) {} } ``` #### 方法三:扩展`WindowAdapter`类 这种方法是通过扩展`WindowAdapter`类并覆盖`windowClosing`方法来实现。这种方式减少了需要重写的方法数量,使得代码更加简洁。 **代码示例:** ```java import java.awt.*; import java.awt.event.*; public class Frame1 extends WindowAdapter { public Frame1() { Frame f = new Frame(); f.setSize(new Dimension(400, 300)); f.setTitle("Frame1"); f.addWindowListener(this); f.setVisible(true); } public static void main(String[] s) { new Frame1(); } public void windowClosing(WindowEvent windowEvent) { System.exit(0); } } ``` #### 方法四:为`Frame`对象添加一个扩展了`WindowAdapter`的匿名内部类 与第三种方法类似,这里使用的是匿名内部类的方式,可以直接在一个类中定义并添加监听器。 **代码示例:** ```java import java.awt.*; import java.awt.event.*; public class Frame1 extends Frame { public Frame1() { this.setSize(new Dimension(400, 300)); this.setTitle("Frame1"); this.addWindowListener(new winAdapter()); this.setVisible(true); } public static void main(String[] s) { new Frame1(); } class winAdapter extends WindowAdapter { public void windowClosing(WindowEvent windowEvent) { System.exit(0); } } } ``` #### 方法五:实现`WindowListener`接口并通过构造函数传递 这种方法与第二种方法相似,但是这里是在构造函数中直接添加监听器,使得代码结构更为清晰。 **代码示例(续接):** ```java import java.awt.*; import java.awt.event.*; public class Frame1 extends Frame { public Frame1() { this.setSize(new Dimension(400, 300)); this.setTitle("Frame1"); this.addWindowListener(new MyWindowAdapter()); } public static void main(String[] args) { new Frame1().setVisible(true); } private class MyWindowAdapter implements WindowListener { public void windowClosing(WindowEvent e) { System.exit(0); } // 其他未实现的方法 public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} } } ``` #### 方法六:使用`setDefaultCloseOperation` 这是最简单也是最常用的一种方法。通过调用`setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)`来设置当窗口关闭时自动退出程序。 **代码示例:** ```java import javax.swing.*; public class Frame1 extends JFrame { public Frame1() { this.setSize(new Dimension(400, 300)); this.setTitle("Frame1"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Frame1().setVisible(true); } } ``` ### 总结 以上就是Java中关闭窗体的六种主要方法。每种方法都有其适用场景和特点。对于简单的应用来说,推荐使用第六种方法——`setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)`,因为它简洁且易于理解。而对于需要更多自定义行为的应用,则可以根据具体需求选择其他方法来实现更复杂的逻辑。
//Frame1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame1 extends JFrame {
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame1");
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
}
2.直接实现WindowListener接口
//Frame1.java
import java.awt.*;
import java.awt.event.*;
public class Frame1 extends Frame implements WindowListener {
public Frame1() {
this.setSize(new Dimension(400, 300));
this.setTitle("Frame1");
this.addWindowListener(this);
}
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
- 粉丝: 20
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助