2016-05-15 68 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; 
      } 
     }}); 

我喜歡什麼就行了: 我開始運行該程序,如果我按上,下,左,右輸出寫回對我來說,向上,向下,向左,向右(這是正確的沒有問題)。 但是!如果按下回車鍵,在按下上,下,左,右,輸入或其他鍵後,不要將輸出寫回上,下,左,右。

所以我想停止KeyEvent「運行」,當我按下ENTER按鈕。

回答

1

你有幾個機會,這兩個先來兩個我的頭腦。

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)上輸入壓機,一個布爾值存儲到成員,並且如果該構件被設置,消耗該事件。

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