【问题标题】:Do we need to use an intermediate method to "dispose()" in an ActionListener?我们是否需要在 ActionListener 中使用中间方法来“dispose()”?
【发布时间】:2015-09-29 17:17:44
【问题描述】:

我在 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();
        }
    });

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

谢谢

【问题讨论】:

  • 没有区别,他只是调用一个单独的方法来处理对话框,没有别的。
  • 第一个变体通常是构建器工具生成代码的方式。它使插入较大的代码片段变得更容易,最好将其放置在外部类中。没有语义上的区别,如果你委托给一个现有的方法,比如dispose(),你可以忽略这个间接。如果exitActionPerformed 不是private,那会有所不同...

标签: java swing actionlistener dispose jdialog


【解决方案1】:

我假设您包含在 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() 方法。

【讨论】:

  • 我没有使用包名。我只是使用了类名MyDialog
【解决方案2】:

两者作用相同。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多