JFrame catch处理事件

And*_*rej 5 java jframe

我有一个Java项目。
我有一个附加了处理程序的JFrame像这样

frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent evt) {
                this.setEnabled(true);

            }
        });
Run Code Online (Sandbox Code Playgroud)

但是,在该框架上,我还具有一个关闭按钮(以使其更加用户友好),并且该“关闭”按钮调用框架处理方法。现在,当我通过单击右上角的小x按钮关闭框架时,将调用WindowListener。但是,当我调用dispose方法时,该事件不会触发。
我应该调用其他方法关闭它,以便WindowListener触发,或者实现另一个侦听器吗?

cba*_*dan 8

您应该看看WindowListener 接口

windowClosing():当用户尝试从窗口的系统菜单关闭窗口时调用。(窗口X按钮)

windowClosed():当窗口因调用dispose在窗口上而关闭时调用。

所以,只有在用户点击窗口的X按钮时windowClosing()才会调用;在调用事件时调用,所以它总是被调用:windowClosed()dispose()

  • 如果用户使用 windows X按钮关闭框架
  • 如果框架由代码以编程方式关闭
    JFrame myFrame = new JFrame();
    myFrame.addWindowListener(new java.awt.event.WindowAdapter() {
        @Override
        public void windowClosed(java.awt.event.WindowEvent windowEvent) {
            // your code
        }
    });
Run Code Online (Sandbox Code Playgroud)

资料来源:https : //alvinalexander.com/blog/post/jfc-swing/closure-your-java-swing-application-when-user-presses-close-but


cam*_*ckr 3

在那个框架上我还有一个关闭按钮(以使其更加用户友好)

查看关闭应用程序解决方案来处理此问题。您真正需要做的就是将“ExitAction”添加到按钮中,但如果您愿意,您可以使用整个方法。