ScalaFX Button =>如何定义动作?

时间:2016-04-12 10:44:39

标签: scala javafx scalafx

我正在尝试为 scalafx 中完成的按钮定义 onAction ,但我无法让它工作。< / p>

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,但它也不起作用。

有任何线索吗?

由于

4 个答案:

答案 0 :(得分:3)

我不是Scala程序员,但看起来你在这里混合了两种不同的形式:一个lambda表达式和一个显式类。

尝试

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*/
  }

}

答案 1 :(得分:2)

拳头,使用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._

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我试过了

List<Todo> todos = context.watch<List<Todo>>()
        .where((e) =>
            e.category == widget.selectedCategory && e.isCompleted == false)
        .toList() ??
    [];

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

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

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

import scalafx.Includes._

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

这对我有用。