Java EventHandler<;ActionEvent>;按下按钮时是否自动调用?

Java EventHandler<;ActionEvent>;按下按钮时是否自动调用?,java,javafx,Java,Javafx,为了测试我对Java接口的理解,我将按钮点击事件处理程序中的匿名类拉入了一个单独的类中——这个类已经工作了——但我不明白它为什么工作 我本来希望自己必须调用类的handle()方法,但似乎我只需要将EventHandler实现作为参数传递。单击按钮显然是在调用handle()方法,我只是不清楚为什么会这样 匿名类版本 Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHand

为了测试我对Java接口的理解,我将按钮点击事件处理程序中的匿名类拉入了一个单独的类中——这个类已经工作了——但我不明白它为什么工作

我本来希望自己必须调用类的
handle()
方法,但似乎我只需要将EventHandler实现作为参数传递。单击按钮显然是在调用
handle()
方法,我只是不清楚为什么会这样

匿名类版本

Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() { 
    @Override
    public void handle(ActionEvent event) {
        System.out.println("Hello World!");
      }
  });
public class HelloWorldEventHandler implements EventHandler<ActionEvent> {

        public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }                
}
是的。查看
setOnAction()
onActionProperty()

onActionProperty()
方法返回您提供的
EventHandler
的包装版本。它将其返回的对象描述为:

按钮的操作,每当启动按钮时都会调用该操作。这可能是由于用户用鼠标单击按钮,或者通过触摸事件,或者通过按键,或者如果开发人员以编程方式调用fire()方法

也就是说,当您
setOnAction()
时,只要启动按钮,就会调用您正在设置的内容

btn.setText("Say 'Hello World'"); 
HelloWorldEventHandler handler = new HelloWorldEventHandler();
btn.setOnAction(handler);