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

时间:2015-09-29 17:17:45

标签: java swing actionlistener dispose jdialog

我在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问题的链接)

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

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

但我真的很关心上面的答案。我做错了什么,或者如果这样做的话,它没有改变任何东西?如果它没有影响,你会知道为什么这个人使用中间方法回答了吗?

谢谢

2 个答案:

答案 0 :(得分:5)

  

我认为您的 MyDialog class包含extends   JDialog

请考虑以下代码。

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

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

访问它

看看你的第二个例子

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

当然,ActionListener也是一个匿名内部类。但它允许访问包含类的方法。因此,可以在此处使用dispose()方法。

答案 1 :(得分:3)

两者都有相同的效果。

该中间方法可能会用于在处置之前执行某些操作。这种类型的操作也可以使用您的版本完成,但使用中间方法可能会更具可读性。