Reputation: 169
I'm trying to definde the onAction accion for a Button done in scalafx but I can't make it to work.
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*/
}
}
}
}
I've done this but I get an error
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]
I also tried to use the javafx.event.ActionEvent
instead of scalafx
but it doesn't work either.
Any clue?
Thanks
Upvotes: 7
Views: 3720
Reputation: 3
I am tried
Import scalafx.Includes._
import scalafx.event.ActionEvent
btn_YES.onAction = (event: ActionEvent) => {
/*Do something*/
}
...
import scalafx.Includes._
btn_YES.onAction = handle {
/*Do something*/
}
on javafx.scene.SubScene.setOnKeyPressed (..), setOnMouseEntered(..) it definitely does NOT WORK.
new EventHandler[KeyEvent]() {
override def handle(event:KeyEvent){...}
}
that work for me.
Upvotes: 0
Reputation: 1533
Fist, working with ScalaFX it is important to import scalafx.Includes._
. It brings in many ScalaFX features.
There are two recomended ways to add onAction
handler. The main one is to use (event:ActionEvent) => { ... )
closure:
import scalafx.Includes._
import scalafx.event.ActionEvent
btn_YES.onAction = (event: ActionEvent) => {
/*Do something*/
}
If you do not care about event
object. You can save some typing and use handle {...}
:
import scalafx.Includes._
btn_YES.onAction = handle {
/*Do something*/
}
In both cases you need to import scalafx.Includes._
Upvotes: 4
Reputation: 209340
I'm not a Scala programmer, but it looks like you are mixing two different forms here: a lambda expression and an explicit class.
Try
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*/
}
}
}
or
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*/
}
}
Upvotes: 3
Reputation: 732
You can use this for button action,
btn_YES.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//Do some action here
}
});
Upvotes: 0