如何捕获jframe的close button click事件?

kkih6yb8  于 2021-06-27  发布在  Java
关注(0)|答案(6)|浏览(505)

我想调用一个方法 confirmExit() 单击jframe标题栏的红色关闭按钮时。
我怎样才能捕捉到那个事件?
如果用户选择不继续,我还要防止窗口关闭。

t1qtbnec

t1qtbnec1#

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);
kmb7vmvb

kmb7vmvb2#

这可能适用于:

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

mqkwyuun

mqkwyuun3#

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

xmd2e60i

xmd2e60i4#

试试这个:

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

会有用的。

kmb7vmvb

kmb7vmvb5#

这是我把它作为一个菜单选项,我在菜单上做了一个按钮 JFrame 显示另一个 JFrame . 我只想看到新的框架,而不是破坏它背后的一个。我最初把第一个藏起来了 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);
        }
    });
});
r55awzrz

r55awzrz6#

重写窗口关闭方法。

public void windowClosing(WindowEvent e)

当窗口处于关闭过程中时调用它。此时可以覆盖关闭操作。

相关问题