我们是否需要在 ActionListener 中使用 "dispose()" 的中间方法?

Do we need to use an intermediate method to "dispose()" in an ActionListener?

我在 SO 上找到了这个答案并且对此感到困惑。

我们有一个问题,有人想知道如何在 ActionListener 中处理 JDialog。

try this way:

exit.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        exitActionPerformed(evt);
    }
});
and then

 private void exitActionPerformed(java.awt.event.ActionEvent evt) {
        this.dispose();
    }

这是回答者发布的代码(here's问题的link)

这是我在自己的代码中所做的事情:

buttonCancel.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            dispose();
        }
    });

但我真的很关心上面的答案。我是在做错什么,还是这样做不会改变任何事情?如果没有影响,你知道那个人为什么用中间方法回答吗?

谢谢

两者效果相同

该中间方法可能用于在处理之前执行一些操作。您的版本也可以执行此类操作,但使用中间方法可能会提高可读性。

I assume that your contains in MyDialog class which extends JDialog

考虑以下代码。

    exit.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            exitActionPerformed(evt);
        }
    });

您已经创建了 java.awt.event.ActionListener 的匿名内部 class。如果您在匿名内部 class 中使用 this 关键字,它允许自己访问它,但不能像您预期的那样访问 MyDialog class。因此 this.dispose() 方法不可用。但您可以通过 MyDialog.this.dispose();

访问它

看你的第二个例子

    buttonCancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            dispose();
        }
    });

当然ActionListener这里也是匿名内class。但它允许访问它包含 class 的方法。所以,这里可以使用dispose()方法。