scalajavafxscalafx

ScalaFX Button => How to define the action?


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


Solution

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