8

JavaFX プログラムがキーボード イベントに応答するようにします。
root Pane、 topmostPaneにリスナーを追加しようとしましたが、イベントに応答しません!
これが私のコードです:

   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

解決策の 1 つは、シーンにイベント リスナーを追加することです。レイアウトにはデフォルトでフォーカスがないため、KeyEvents に応答しません。KeyEvents は、最初にフォーカスのあるノードに渡されます。

別の解決策は、ペインをフォーカス可能にすることです。

root.setFocusTraversable(true)
于 2013-05-30T11:52:53.870 に答える
0

また、次のように正しい KeyEvent をインポートしていることを確認してください

import javafx.scene.input.KeyEvent;

awt の KeyEvent ではなく

于 2015-07-20T03:38:11.787 に答える