2016-04-12 13 views
4

私はscalafxで行わボタンためonActionアクシオンをdefindeしようとしているが、私はそれを動作させることはできません。ScalaFX Button =>アクションを定義する方法は?

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

私はこれをやったが、私は私が代わりscalafxjavafx.event.ActionEventを使用しようとしましたが、それはどちらか動作しません、エラー

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] 

を取得します。

ヒント?

おかげ

答えて

0

あなたはボタンアクション、

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

のためにこれを使用することができます私は、Scalaのプログラマーないんだけど、あなたはここで2つの異なる形態の混合されているように見えます:ラムダ式と明示的にクラス。

は、scalafx.Includes._をインポートすることが重要であるScalaFXでの作業、

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

} 
+0

良い答えをインポートする必要があり、両方のケースでは、しかし、あなたはまた、 'インポートscalafx.Includes._'を追加する必要があります - それはいくつかの暗黙の型変換を追加しますこれは2番目のバージョン( 'EventHandler'ではなく関数で)に必要だと思います。一般に、このインポートは常にScalaFXコードで使用する必要があります。 –

2

拳を試してみてください。それは多くのScalaFX機能をもたらします。

onActionハンドラを追加する2つの推奨方法があります。あなたはおよそeventオブジェクトを気にしない場合は

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

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

:主なものは、(event:ActionEvent) => { ...)クロージャを使用することです。あなたは、いくつかの入力を保存し、handle {...}を使用することができます。

import scalafx.Includes._ 

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

あなたはscalafx.Includes._

関連する問題