2017-03-02 5 views
-1

KeyEventイベントハンドラをJavaFXウィンドウに追加しようとしていますが、primarystageまたはprimarysceneに追加しようとするとエラーが発生します。JavaFXウィンドウKeyEvent

イベントハンドラをウィンドウに追加するにはどうすればよいですか?

マイシーンにそれを追加するハンドラ

EventHandler<KeyEvent> handler = event -> { 
    switch (event.getCode()) { 
     case UP: 
      System.out.println("up"); 
      break; 
     case DOWN: 
      System.out.println("down"); 
      break; 
     case LEFT: 
      System.out.println("left"); 
      break; 
     case RIGHT: 
      System.out.println("right"); 
      break; 
    } 
}; 

mainScene.addEventHandler(EventType.ROOT, handler); 

エラー:

Error:(75, 18) java: method addEventHandler in class javafx.scene.Scene cannot be applied to given types; required: javafx.event.EventType,javafx.event.EventHandler
found: javafx.event.EventType,javafx.event.EventHandler reason: inference variable T has incompatible bounds equality constraints: javafx.event.Event upper bounds: javafx.scene.input.KeyEvent,javafx.event.Event

+0

[編集]あなたの質問をどのようにシーンにこのハンドラを追加しようとしているのかを示してください。あなたはどんなエラーを出していますか? –

+0

投稿を編集しました – Lithicas

答えて

1

あなたのハンドラはEventHandler<KeyEvent>です:つまり、それはキーを扱うハンドラですイベント。だから、種類がKeyEventの何らかの種類のイベントを処理するには、それを登録する必要があります。 (EventType.ROOTEventType<Event>、ないEventType<KeyEvent>です。)

あなたはdocumentationを見れば、あなたは、可能なイベントの種類は

  • KeyEvent.KEY_PRESSED
  • KeyEvent.KEY_RELEASED
  • KeyEvent.KEY_TYPED
  • KeyEvent.ANYていることがわかります
あなたは、おそらくどちらか KeyEvent.KEY_PRESSEDまたは KeyEvent.KEY_RELEASEDをしたいので getCode()は常にもあること

mainScene.addEventHandler(KeyEvent.KEY_PRESSED, handler); 

または

mainScene.addEventHandler(KeyEvent.KEY_RELEASED, handler); 

注すなわち、KeyCode.UNDEFINEDKEY_TYPEDのイベントを返すことdocumentationから再び

注意、便利なメソッドScene.setOnKeyPressed(...)などがありますが、これらを使用してハンドラを登録することはできません。

+0

完全に動作します、ありがとうございます! – Lithicas

関連する問題