JFRAME的关闭设置

在JFRAME弹出新的FRAME以后,关闭新的FRAME会同时关闭整个应用,遍寻网络之后,找到解决方案:

JFRAME默认的关闭事件有三个选项:

JFrame.defaultCloseOperation(int option)

  • JFrame.EXIT_ON_CLOSE -- 退出应用.
    • 运行applet时不要使用这个选项,因为会导致浏览器崩溃!
  • JFrame.DISPOSE_ON_CLOSE -- 关闭和销毁frame, 不退出应用。
  • JFrame.DO_NOTHING_ON_CLOSE -- 关闭但不销毁frame, 不退出应用.

也可以使用添加Listener的方式,

java.awt.Window.addWindowListener(java.awt.event.WindowListener l)

示例代码如下:

import java.awt.event.*;
import javax.swing.*;
public class JFrameClose3  {
   public static void main(String[] a) {
      JFrame f = new JFrame();
      f.setTitle("Closing Frame with Window Listener");
      f.setBounds(100,50,500,300);
      f.addWindowListener(new MyWindowListener());
      f.setVisible(true);
   }
   static class MyWindowListener extends WindowAdapter {
      public void windowClosing(WindowEvent e) {
         System.exit(0);
      }
   }
}
或者用第三种方式,

java.awt.Window.processWindowEvent(java.awt.event.WindowEvent e)

示例代码如下:

import java.awt.event.*;
import javax.swing.*;
public class JFrameClose2  {
   public static void main(String[] a) {
      MyJFrame f = new MyJFrame();
      f.setTitle("Closing Frame with Process Window Event");
      f.setBounds(100,50,500,300);
      f.setVisible(true);
   }
   static class MyJFrame extends JFrame {
      protected void processWindowEvent(WindowEvent e) {
         if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            System.exit(0);
         }
      }
   }
}

### JFrame 关闭窗口事件的实现 在 Java 的 `JFrame` 中,可以通过设置关闭操作来处理窗口关闭事件。具体来说,可以使用 `setDefaultCloseOperation()` 方法定义当用户尝试关闭窗口时的行为。此外,还可以通过监听器机制捕获并自定义窗口关闭逻辑。 以下是常见的几种方式: #### 使用 `setDefaultCloseOperation()` `JFrame` 提供了一个简单的方法用于指定默认的关闭行为。可以选择以下选项之一[^5]: - `DO_NOTHING_ON_CLOSE`: 不执行任何操作。 - `HIDE_ON_CLOSE`: 隐藏框架而不将其销毁。 - `DISPOSE_ON_CLOSE`: 销毁当前帧实例。 - `EXIT_ON_CLOSE`: 终止整个应用程序。 示例代码如下: ```java import javax.swing.JFrame; public class CloseExample { public static void main(String[] args) { JFrame frame = new JFrame("Close Example"); frame.setSize(300, 200); // 设置默认关闭操作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } ``` #### 自定义关闭逻辑 如果需要更复杂的关闭逻辑(例如提示用户保存未保存的数据),则可以注册一个 `WindowListener` 或者使用简化版的 `WindowAdapter` 来捕获 `windowClosing` 事件[^6]。 下面是一个完整的例子,展示如何拦截窗口关闭事件并弹出确认对话框: ```java import javax.swing.*; import java.awt.event.*; public class CustomCloseOperation { public static void main(String[] args) { JFrame frame = new JFrame("Custom Close Operation"); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 禁用默认关闭操作 // 添加 Window Listener frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { int result = JOptionPane.showConfirmDialog(frame, "Are you sure you want to exit?", "Exit Confirmation", JOptionPane.YES_NO_OPTION); if (result == JOptionPane.YES_OPTION) { System.exit(0); // 手动退出程序 } } }); frame.setVisible(true); } } ``` 在这个例子中,`JOptionPane` 被用来显示一个确认对话框,在用户点击“是”之前不会终止程序运行。 --- ### 总结 对于简单的场景可以直接调用 `setDefaultCloseOperation()` 并选择合适的枚举值;而对于复杂需求,则应考虑结合 `WindowListener` 实现更加灵活的功能扩展[^7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值