8

我希望我的 JavaFX 程序能够响应键盘事件。
我尝试将侦听器添加到 root Pane,到 topmost 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());
            }
        }
    });

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

4

3 回答 3

14

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

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

root.setFocusTraversable(true)
于 2013-05-30T11:52:53.870 回答
1

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

于 2017-07-13T19:39:27.803 回答
0

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

导入 javafx.scene.input.KeyEvent;

而不是来自 awt 的 KeyEvent

于 2015-07-20T03:38:11.787 回答