【问题标题】:ActionEvent confusionActionEvent 混乱
【发布时间】:2014-07-29 11:13:40
【问题描述】:

我对 Java 很陌生,我对 ActionEvent 类感到困惑。

我的印象是,要使用一个类,你必须创建一个新对象,例如:

SomeClass aClass = new SomeClass();

但是在这段代码中:

private class theHandler implements ActionListener{

    public void actionPerformed(ActionEvent event){
       Event.getSource() 
      // etc...
    }
}

你怎么不需要:

ActionEvent event = new ActionEvent();

事件成为ActionEvent 类的一个实例,而无需明确告诉它。 很抱歉这是一个愚蠢的问题,我正在自学 Java,这让我非常困惑。

【问题讨论】:

  • 我猜Event.getSource() 应该是event.getSource()。由于大写使用不正确,您原始帖子中的代码(编辑之前)甚至没有编译。

标签: java swing user-interface awt actionlistener


【解决方案1】:

ActionEvent 在某处创建的,但它并不是由您明确创建的。相反,它是在 JButton 的代码中创建的(实际上代码在 AbstractButton 类中,它是 JButton 的父类),用于通知所有 ActionListener 监听器已附加到它。如果需要,您可以查看源文件以查看详细信息。

【讨论】:

    【解决方案2】:

    当您在 Java 中使用 implements 时,您所做的是使用 interface。接口需要在您的代码中实现某些方法,并提供一种方法来确保实现某个接口的新类具有可以调用的方法。

    因此,在您的示例中:

    private class theHandler implements ActionListener{
    
        public void actionPerformed(ActionEvent event){
           event.getSource() 
          // etc...
        }
    }
    

    ActionListener 接口由theHandler 实现,因此方法actionPerformed(ActionEvent event) 需要由您的类实现。这里没有显式创建ActionEvent event = new ActionEvent();,因为ActionEvent 实际上是作为参数传递给actionPerformed,否则会在其他地方创建。

    特别是对于您的示例,您还可以执行以下操作,而不是在您的课程中使用 implements 关键字:

    public class theHandler {
        public theHandler() {
            JButton button = new JButton();
            button.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // do some stuff here
                }
            });
        }
    }
    

    【讨论】:

      【解决方案3】:

      其实很简单,有个东西叫静态方法。这些是您可以在类中使用的方法,而无需将它们创建为对象。

      就像 Math 类和它的所有函数 fx。静态方法可能如下所示:

      public class HiClass {
          public static String sayHi() {
            return "Hi!";
          }
      }
      

      然后你会在这样的上下文中使用它:

      System.out.println( HiClass.sayHi() );
      

      这将打印出方法在控制台中返回的字符串。

      您可能会问“那我为什么不将我的类中的所有方法都设为静态呢?”原因有很多,我能想到的一个主要原因是,当你编程时,你总是试图将责任限制在有意义的类中,这样代码就更易于管理,也更容易随着程序的增长而改变。

      这并不特定于您提到的上下文,但在我看来,您真正的问题是如何在不创建对象的情况下使用方法?

      希望它能回答你的问题吗?

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 2010-12-04
        • 2011-05-05
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多