编程动作侦听器的常用方法是什么?

Rom*_*man 4 java actionlistener

我刚开始学习如何使用动作监听器.根据我的理解,它的工作方式如下:

  1. 有些类默认包含"addActionListener"方法(例如按钮类).

  2. 使用此方法,我们向对象添加一个动作侦听器.例如:listenedObject.addActionListener(listeningObject).

  3. 当执行具有"listenedObject"的动作时,将调用"listenObject"的"actionPerformed"方法.所以,这意味着当我们为listenObject编写一个类时,我们需要放置"actionPerformed"方法.

我不清楚,我们是否应该为每个想要听的对象创建一个新类.在我看来,这不是一个优雅的解决方案.另一方面,如果我们有一个动作监听器类用于所有(或至少很多)对象,那么我们遇到问题,因为这个类的实例不知道哪个对象正在调用"actionPerformed"方法(我们需要知道,因为actionPerformed执行的操作因此方法的调用方式而异.

在我看来,对于我们需要创建的每个被监听对象都是"个人"动作监听器,我们可以通过将特定值设置为动作监听器的相应字段来实现.但我不确定这是一个标准的方法吗?人们通常如何做到这一点?

Dan*_*ham 7

处理这种情况的最常见方式 - 从我自己的个人经验来看 - 就是简单地创建一个匿名的内联类.像这样:

listenedObject.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        // Your action handling code in here
    }
});
Run Code Online (Sandbox Code Playgroud)

而且我经常看到人们调用包含listenedObject的对象的方法.例如,在具有按钮的Dialog中:

myOkayButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        okayButtonPressed();
    }
});
Run Code Online (Sandbox Code Playgroud)

然后在对话框类中:

private void okayButtonPressed() {
    // Do what we need to do
}
Run Code Online (Sandbox Code Playgroud)

  • 好.我知道了.顺便问一下,@ Override是什么意思? (2认同)
  • 注释只是告诉编译器在超类中查找overriden方法,如果它不存在或不匹配则对你大喊大叫. (2认同)