首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionEvent混淆

ActionEvent混淆
EN

Stack Overflow用户
提问于 2014-06-09 06:10:02
回答 3查看 48关注 0票数 0

我是Java的新手,我对ActionEvent类感到困惑。

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

代码语言:javascript
复制
SomeClass aClass = new SomeClass();

但在这段代码中:

代码语言:javascript
复制
private class theHandler implements ActionListener{

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

为什么你不需要:

代码语言:javascript
复制
ActionEvent event = new ActionEvent();

事件将成为ActionEvent类的实例,而无需显式通知它。很抱歉这是一个愚蠢的问题,我在自学Java,这让我很困惑。

EN

回答 3

Stack Overflow用户

发布于 2014-06-09 06:11:50

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

票数 2
EN

Stack Overflow用户

发布于 2014-06-09 06:27:11

当您在Java语言中使用implements时,您所做的就是使用。接口要求在代码中实现特定的方法,并提供一种方法来确保实现特定接口的新类具有可调用的方法。

因此,在您的示例中:

代码语言:javascript
复制
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关键字:

代码语言:javascript
复制
public class theHandler {
    public theHandler() {
        JButton button = new JButton();
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // do some stuff here
            }
        });
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-06-09 06:18:40

这真的很简单,有一种叫做静态方法的东西。这些方法可以在类中使用,而不需要创建对象。

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

代码语言:javascript
复制
public class HiClass {
    public static String sayHi() {
      return "Hi!";
    }
}

然后,您可以在某些上下文中使用它,如下所示:

代码语言:javascript
复制
System.out.println( HiClass.sayHi() );

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

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

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

希望它能回答你的问题?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24111375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档