无法在JavaFX中收听KeyEvent [英] Cannot listen to KeyEvent in JavaFX

查看:81
本文介绍了无法在JavaFX中收听KeyEvent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want my JavaFX program to respond to keyboard events.
I tried adding listeners to root Pane, to topmost Pane, but it doesn't respond to events!
Here is my code:

   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());
            }
        }
    });

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

WHY U NO WORKING, key events? Am I doing something wrong here?
To be sure, mouse events works fine with the same code.

推荐答案

一种解决方案是将事件侦听器添加到场景中.由于布局默认情况下没有焦点,因此它们不会对KeyEvent做出响应. KeyEvents首先传递到焦点节点.

One solution is to add an event listener to the scene. Because layouts don't have focus by default, so they don't respond on KeyEvents. KeyEvents are passed to the focused node first.

另一种解决方案是使窗格可聚焦:

Another solution is to make your pane focusable:

root.setFocusTraversable(true)

这篇关于无法在JavaFX中收听KeyEvent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆