【问题标题】:Cannot listen to KeyEvent in JavaFX无法在 JavaFX 中收听 KeyEvent
【发布时间】:2013-05-30 11:30:05
【问题描述】:

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

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

【问题讨论】:

  • 在场景中添加监听器?

标签: javafx-2 keyboard-events keyevent


【解决方案1】:

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

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

root.setFocusTraversable(true)

【讨论】:

  • 我添加了一个SplitPane,里面有一个节点。那时工作得很好。不适用于 BorderPane,即使我 setFocusTraversable(true)...不知道为什么会有差异。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    导入 javafx.scene.input.KeyEvent;

    而不是来自 awt 的 KeyEvent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多