在JavaFX场景上多按键

bur*_*gar 3 java javafx

如何在单个场景中检测到多个关键事件?我需要我的程序来检测何时同时按下空格键右箭头键.

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    public void handle(KeyEvent ke) {
        if (ke.getCode() == KeyCode.RIGHT) {
            ///
        }

        if (ke.getCode() == KeyCode.LEFT) {
            ///
        }

        if (ke.getCode() == KeyCode.SPACE) {
            ///
        }

        if (ke.getCode() == KeyCode.RIGHT && ke.getCode() == KeyCode.SPACE) {
            // How??
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

前3个表达式寻找单个键并且工作正常.最后的表达式永远不会返回true.我相信只有最新的关键事件才会传递给处理程序.

我查看了KeyCodeCombination,但这似乎是在一个键具有来自指定列表(ALT_DOWN,SHIFT_DOWN等)的修饰键的情况下使用.

我可以使用FX中的实用程序吗?

Jam*_*s_D 11

试试这个:

final BooleanProperty spacePressed = new SimpleBooleanProperty(false);
final BooleanProperty rightPressed = new SimpleBooleanProperty(false);
final BooleanBinding spaceAndRightPressed = spacePressed.and(rightPressed);

// How to respond to both keys pressed together:
spaceAndRightPressed.addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<Boolean> obs, Boolean werePressed, Boolean arePressed) {
        System.out.println("Space and right pressed together");
    }
});

// Wire up properties to key events:
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent ke) {
        if (ke.getCode() == KeyCode.SPACE) {
            spacePressed.set(true);
        } else if (ke.getCode() == KeyCode.RIGHT) {
            rightPressed.set(true);
        }
    }
});

scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent ke) {
        if (ke.getCode() == KeyCode.SPACE) {
            spacePressed.set(false);
        } else if (ke.getCode() == KeyCode.RIGHT) {
            rightPressed.set(false);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)