java frame button_java - 如何捕获JFrame的关闭按钮单击事件?

java - 如何捕获JFrame的关闭按钮单击事件?

我想在单击JFrame标题栏的红色关闭按钮时调用方法confirmExit()。

我该如何捕获该事件?

如果用户选择不继续,我还想阻止窗口关闭。

6个解决方案

122 votes

import javax.swing.JOptionPane;

import javax.swing.JFrame;

/*Some piece of code*/

frame.addWindowListener(new java.awt.event.WindowAdapter() {

@Override

public void windowClosing(java.awt.event.WindowEvent windowEvent) {

if (JOptionPane.showConfirmDialog(frame,

"Are you sure you want to close this window?", "Close Window?",

JOptionPane.YES_NO_OPTION,

JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){

System.exit(0);

}

}

});

如果您还想阻止窗口关闭,除非用户选择“是”,您可以添加:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

Ravindra Gullapalli answered 2019-05-05T23:43:25Z

25 votes

覆盖windowClosing方法。

public void windowClosing(WindowEvent e)

当窗口处于关闭状态时调用它。 此时可以覆盖关闭操作。

Shashank Kadne answered 2019-05-05T23:43:55Z

4 votes

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

也有效。 首先创建一个名为frame的JFrame,然后在下面添加此代码。

Russell answered 2019-05-05T23:44:19Z

1 votes

这可能有效:

jdialog.addWindowListener(new WindowAdapter() {

public void windowClosed(WindowEvent e) {

System.out.println("jdialog window closed event received");

}

public void windowClosing(WindowEvent e) {

System.out.println("jdialog window closing event received");

}

});

资料来源:[https://alvinalexander.com/java/jdialog-close-closing-event]

Phidippus answered 2019-05-05T23:44:44Z

1 votes

这就是我作为一个菜单选项,我在ng上创建了一个按钮,以显示另一个JButton。我只希望新框架可见,而不是破坏它背后的框架。 我最初隐藏了第一个JFrame,而新的一个变得可见。 在关闭新的JFrame后,我处理了它,然后再次使旧的可见。

注意:以下代码扩展了Ravinda的答案,ng是JButton:

ng.addActionListener((ActionEvent e) -> {

setVisible(false);

JFrame j = new JFrame("NAME");

j.setVisible(true);

j.addWindowListener(new java.awt.event.WindowAdapter() {

@Override

public void windowClosing(java.awt.event.WindowEvent windowEvent) {

setVisible(true);

}

});

});

Cody answered 2019-05-05T23:45:16Z

-1 votes

试试这个:

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

它会工作。

vikas bodade answered 2019-05-05T23:45:37Z

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程设计说明书 一、 课程设计目的 1 通过实际的编程与学习,了解自己的学习情况和实际动手能力; 2 通过编程发现问题与解决问题,提高自己解决问题的能力; 3 通过编程熟悉 java 的编程过程和软件的使用技巧。 二、 设计内容 1 设计计算器的框架与组件; 2 向面板上添加按钮与组件并给每个面板添加事件; 3 设计事件的响应,实现计算功能。 三、要求分析 1 需求1; 2 需求2; 3 需求3。 四、概要设计(功能设计) 用户随意进行加、减、乘、除、平方、开跟等操作,方便快捷的实现运算功能, 方便用户进行准确无误的运算。 设计思路:向 Frame 中添加容器,在 north 中添加文本框,center 中添加面板, 面板设为 gridlayout 布局,然后添加按纽,设置监听器,设置事件和响应。 五、程序源代码(详细设计) import java.awt.*; import java.awt.event.*;//引入事件包 import javax.swing.*; import java.lang.Math;//引入 Math 包,进行数学运算 public class Calculator implements ActionListener,WindowListener { private JFrame f=new JFrame("计算器"); JTextField tf=new JTextField(10); String m; char sign;//判断符号:+、-、×、/ Double a,b,c;//a 为第一个运算数,b 为第二个运算数,c 为输出数 Panel pa;//定义面板 Button bqingkong;//定义按钮 Button btuige; Button bkaigen; Button bpingfang; Button b1; Button b2; Button b3; Button bcheng; Button b4; Button b5; Button b6; Button bchu; Button b7; Button b8; Button b9; Button bjian; Button b0; Button bpoint; Button bjia; Button bdengyv; public void creat()//建立计算器面板 { f.setSize(200,300); f.setVisible(true); tf.setEditable(false); tf.setHorizontalAlignment(JTextField.RIGHT); Container c= f.getContentPane();//设置容器 c.add(BorderLayout.NORTH,tf); Panel p=new Panel(); c.add(BorderLayout.CENTER,p); GridLayout g=new GridLayout(5,4); p.setLayout(g); bqingkong=new Button("C"); //分别添加按钮事件 bqingkong.addActionListener(this); p.add(bqingkong); btuige=new Button("back"); btuige.addActionListener(this); p.add(btuige); bkaigen=new Button(" "); bkaigen.addActionListener(this); p.add(bkaigen); bpingfang=new Button("^2"); bpingfang.addActionListener(this); p.add(bpingfang); b1=new Button("1"); b1.addActionListener(this); p.add(b1); b2=new Button("2"); b2.addActionListener(this); p.add(b2); b3=new Button("3"); b3.addActionListener(this); p.add(b3); bcheng=new Button("*"); bcheng.addActionListener(this); p.add(bcheng); b4=new Button("4"); b4.addActionListener(this); p.add(b4); b5=new Button("5"); b5.addActionListener(this); p.add(b5); b6=new Button("6"); b6.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值