gpt4 book ai didi

设置 jFrame.setUndecorated(true) 时不调用 Java WindowClosing 事件

转载 作者:行者123 更新时间:2023-12-02 02:25:18 25 4
gpt4 key购买 nike

在下面的代码片段中,除非您从代码片段中删除一行代码,否则不会调用 WindowClosing 事件。要删除的代码行是:

jFrame.setUndecorated(true);

显然这个 setUndecorated(true) 方法禁用了 WindowListener/WindowAdapter 功能。这正常吗?

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.apache.commons.io.FileUtils;

public class WindowClosing extends JFrame {

private static WindowClosing jFrame;
private static Container contentPane;

public WindowClosing() throws HeadlessException {
super();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog(null, "closing" ,"Cookie", JOptionPane.INFORMATION_MESSAGE);
try {
FileUtils.cleanDirectory(new File("./temp/"));
} catch (IOException e1) {
e1.printStackTrace();
}
e.getWindow().dispose();
System.exit(0);
}
});
}

public static void main(String[] args) {
jFrame = new WindowClosing();
jFrame.setUndecorated(true);
jFrame.pack();
contentPane = jFrame.getContentPane();
contentPane.setLayout(new BorderLayout());
jFrame.setVisible(true);
}
}

最佳答案

关闭框架时未调用WindowListener的原因是:窗口不会通过框架的关闭图标关闭,该图标由jFrame.setUndecorated(true);禁用。即使系统图标(关闭、最大化、最小化)存在并且用户使用菜单项关闭框架,也不会调用 WindowListener。

关于设置 jFrame.setUndecorated(true) 时不调用 Java WindowClosing 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com