2016-05-15 13 views
1

を聞く停止したKeyEvent:私は到達したいと何私は非常に簡単にKeyEventを持ってJavaFXの

@Override 
public void start(Stage stage) throws Exception { 
    Group root = new Group(); 
    Scene scene = new Scene(root); 
    Canvas canvas = new Canvas(900, 700); 

    scene.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      switch (ke.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; 
       case ENTER: 
        //ke.consume(); 
        break; 
       default: 
        break; 
      } 
     }}); 

: 私はプログラムを実行するために開始し、私はアップを押すと、下、左、右の出力がライトバック私にUP、DOWN、LEFT、RIGHT(これは問題ありません)。 しかし、!私がEnterを押すと、Up、Down、Left、Rightを押した場合、Enterまたは別のキーで出力を上、下、左、右に書き戻しません。

私はENTERボタンを押したときにKeyEventを "実行中"にするのをやめます。

答えて

1

あなたはいくつかの機会がありますが、これらの2つは私の頭の中で最初に来ました。

1)キーイベントのリスナーをクラスのメンバーとして格納し、ENTERキーを押して登録を解除します。

private EventHandler<KeyEvent> keyHandler; 


@Override 
public void start(Stage stage) { 
    final Scene scene = new Scene(new Group()); 
    stage.setTitle("Table View Sample"); 
    stage.setWidth(450); 
    stage.setHeight(500); 

    keyHandler = new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      switch (ke.getCode()) { 
       case ENTER: 
        scene.removeEventHandler(KeyEvent.KEY_PRESSED, keyHandler); 
        break; 
       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; 


       default: 
        break; 
      } 
     }}; 

    scane.addEventHandler(KeyEvent.KEY_PRESSED, keyHandler); 

2)、プレスENTER部材にブール値を格納し、このメンバが設定されている場合、イベントを消費について。

private Boolean enterPressed = false; 

@Override 
public void start(Stage stage) { 
    final Scene scene = new Scene(new Group()); 
    stage.setTitle("Table View Sample"); 
    stage.setWidth(450); 
    stage.setHeight(500); 

    scene.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      if(enterPressed){ 
       ke.consume(); 
       return; 
      } 

      switch (ke.getCode()) { 
       case ENTER: 
        enterPressed = true; 
        break; 
       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; 

       default: 
        break; 
      } 
     }}); 

どちらも好きなものを選んでください。

+0

ありがとうございました!私は私の日を救ったO.O – Dreamfire

関連する問題