2016-11-13 3 views
0

В проекте javaFY я хочу добавить нажатой клавишу для прослушивания всего окна. Корневой узел в файле FXML окна является:Событие с ключевыми сообщениями не активировано

<VBox onKeyPressed="#windowKeyPressed" fx:controller="hu.kleni.tetris.EventController" ...> 

И HTE обработчик событий класса:

public class EventController { 
    @FXML 
    public void windowKeyPressed(KeyEvent event) { 
     System.out.println(event.getCode()); 
    } 
    ... 
} 

В методе main(), он просто загружает и запускает окно. Если я запустил программу, появятся окна, но после нажатия клавиши я ничего не вижу в консоли. Я что-то пропустил?

Edit: Хотя я мог бы использовать это (и это работает отлично):

scene.setOnKeyPressed((event) -> { 
    // maybe call EventController.windowKeyPressed(event); 
}) 

, я бы предпочел, чтобы определить все обработчики событий только в файле FXML.

ответ

1

Для работы необходимо использовать root (VBox) для фокусировки на onKeyPressed.

В вашем Application классе requestFocus() на ваш root после Stage показан, например .:

@Override 
public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));   
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    root.requestFocus(); // add this, root is the VBox in your case 
} 
Смежные вопросы