无法在JavaFX中侦听KeyEvent

时间:2013-05-30 11:30:05

标签: javafx-2 keyboard-events keyevent

我希望我的JavaFX程序能够响应键盘事件 我尝试将监听器添加到根Pane,最上面的Pane,但它不响应事件!
这是我的代码:

   AnchorPane root = new AnchorPane();
   root.setOnKeyPressed(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            pressKey(t.getCharacter().charAt(0));
        }
    });
    root.setOnKeyReleased(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            releaseKey(t.getCharacter().charAt(0));
        }
    });
    root.addEventHandler(EventType.ROOT, new EventHandler<Event>() {

        @Override
        public void handle(Event t) {
            if (t.getClass().equals(KeyEvent.class)) {
                System.out.println("AAARGH! " + ((KeyEvent)t).getCharacter());
            }
        }
    });

为什么你不工作,关键事件?我在这里做错了吗? 可以肯定的是,使用相同的代码鼠标事件可以正常工作。

3 个答案:

答案 0 :(得分:12)

一种解决方案是向场景添加事件侦听器。因为布局默认没有焦点,所以它们不响应KeyEvents。 KeyEvents首先传递给焦点节点。

另一种解决方案是让您的窗格具有焦点:

root.setFocusTraversable(true)

答案 1 :(得分:1)

((KeyEvent)t).getCharacter()改为使用((KeyEvent)e).getText()

答案 2 :(得分:0)

还要确保导入正确的KeyEvent,如

导入javafx.scene.input.KeyEvent;

而不是来自awt的KeyEvent