ScalaFX Button => 如何定义动作?

ScalaFX Button => How to define the action?

我正在尝试为在 scalafx 中完成的 Button 定义 onAction 动作但我无法正常工作。

package App.Desktop

import javafx.event.EventHandler

import scalafx.event.ActionEvent

import scalafx.scene.control.Button

class Window() {

  btn_YES.onAction = (event: ActionEvent) => 
   new EventHandler[ActionEvent] {
     override def handle(event: ActionEvent) {
        /*Do something*/
      }
    }
  }
}

我已经这样做了,但出现错误

Error: type mismatch;
 found   : scalafx.event.ActionEvent => javafx.event.EventHandler[scalafx.event.ActionEvent]
 required: javafx.event.EventHandler[javafx.event.ActionEvent]
  btn_YES.onAction = (event: ActionEvent) => new EventHandler[ActionEvent]

我也尝试使用 javafx.event.ActionEvent 而不是 scalafx,但它也不起作用。

有线索吗?

谢谢

您可以将其用于按钮操作,

btn_YES.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
            //Do some action here
    }
});

我不是 Scala 程序员,但看起来您在这里混合了两种不同的形式:lambda 表达式和显式 class.

尝试

package App.Desktop

import javafx.event.EventHandler

import javafx.event.ActionEvent

import scalafx.scene.control.Button

class Window() {

    btn_YES.onAction = 
        new EventHandler[ActionEvent] {
            override def handle(event: ActionEvent) {
                /*Do something*/
            }
        }

}

package App.Desktop

import javafx.event.EventHandler

import javafx.event.ActionEvent

import scalafx.scene.control.Button

class Window() {

  btn_YES.onAction = (event: ActionEvent) =>  {
        /*Do something*/
  }

}

首先,使用 ScalaFX 导入 scalafx.Includes._ 很重要。它带来了许多 ScalaFX 功能。

有两种推荐的方法来添加 onAction 处理程序。最主要的是使用(event:ActionEvent) => { ... )闭包:

import scalafx.Includes._
import scalafx.event.ActionEvent

btn_YES.onAction = (event: ActionEvent) =>  {
  /*Do something*/
}

如果你不关心event对象。您可以节省一些输入并使用 handle {...}:

import scalafx.Includes._

btn_YES.onAction = handle {
  /*Do something*/
}

在这两种情况下,您都需要导入 scalafx.Includes._

我试过了

Import scalafx.Includes._
import scalafx.event.ActionEvent

btn_YES.onAction = (event: ActionEvent) =>  {
  /*Do something*/
}
...

import scalafx.Includes._

btn_YES.onAction = handle {
  /*Do something*/
}

在 javafx.scene.SubScene.setOnKeyPressed (..),setOnMouseEntered(..) 它绝对不起作用。

new EventHandler[KeyEvent]() {
      override def handle(event:KeyEvent){...}
}

对我有用。