java - 如何使用 EventHandler javafx 编写 lambda 表达式

标签 java javafx lambda expression eventhandler

我正在尝试重写这段代码

new EventHandler<MouseEvent>() {

    @Override
    public void handle(MouseEvent e) {
        System.out.println(e.hashCode());
    }
};

作为

new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode()));

然后我收到错误。我的错误是什么?

最佳答案

lambda 表达式在这里取代了整个 FunctionalInterface 而不仅仅是它的方法,所以它不是 constructor + lambda 而只是 lambda :

  1. 使用EventHandler作为参数:

    someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
                            new EventHandler<MouseEvent>() {
                               @Override
                               public void handle(MouseEvent event) {
                                  System.out.println(event.hashCode());
                               }
                            });
    

    变成:

     someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
                              event ->  System.out.println(event.hashCode()));
    

  1. 在变量中使用 EventHandler :

    EventHandler<MouseEvent> eh = new EventHandler<MouseEvent>() {
                                       @Override
                                       public void handle(MouseEvent event) {
                                           System.out.println(event.hashCode());
                                       }
                                };
    

    它将变成:

    EventHandler<MouseEvent> eh = e -> System.out.println(e.hashCode());
    


存在多种使用 lambda 的方式,有或没有参数,例如:

Runnable r = () -> System.out.println("Here");

关于java - 如何使用 EventHandler javafx 编写 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306039/

相关文章:

java - 计算日期差异时出现奇怪的值

java - viewFlipper.getDisplayedChild 空对象引用

java - 自 jre1.8.0_20 版本更新以来,移动选项卡不再起作用

Scala - 在映射函数中与 lambda 混淆

c++ - lambda 及其捕获的值

层次结构对象上的 Java lambda 运算

Java 位移位,短字节转换

java - 如何使用将字符串拆分为没有特殊字符的字符数组?

javafx - JavaFX 线程何时绘制到显示器上?

java - 如何仅从 JavaFx 图表中的选定系列中删除符号标记?