2014-02-10 44 views
2

我用這個功能之後,關閉階段,而按下Esc鍵它工作正常,但我wheather鍵盤上的Tab專注於表可能不會工作。按Esc的JavaFx關閉窗口不能在桌面視圖上工作?

scene.setOnKeyPressed(new EventHandler<KeyEvent>() 
{ 
    @Override 
    public void handle(KeyEvent evt) 
    { 
    if(evt.getCode().equals(KeyCode.ESCAPE)) 
    { 
     dialogStage.close(); 
    } 
    } 
}); 

回答

3

看來KeyEvent事件正在被消耗子節點TableView。所以,正確的做法將被安裝EventFilter而不是EventHandler

scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { 
    @Override 
    public void handle(KeyEvent evt) { 
     if (evt.getCode().equals(KeyCode.ESCAPE)) { 
      stage.close(); 
     } 
    } 
}); 

要查看事件處理程序和過濾器之間的差異是指Handling JavaFX Events

0

我有同樣的問題,但發現KeyEvent的目標是TableView,而不是父母階段,這就是爲什麼父母沒有得到Esc事件。基於EventHandler

我的變種(bubbling phase):

myTable.setOnKeyReleased(event -> { 
    if (event.getCode() == KeyCode.ESCAPE) { 
     stage.close(); 
    } 
});