Обработка одновременного нажатия нескольких кнопок в javafx

129
03 февраля 2021, 06:20

У меня есть панель, на которой рисуются графики функций. С помощью этого метода на неё повешен слушатель. Предполагается, что, при нажатии на стрелки клавиатуры, график будет перемещаться, но когда я нажимаю одновременно две кнопки, график перемещается только в одну сторону, более того, когда я отпускаю одну из кнопок, вторая больше не регистрируется. Я проверил это через System.out.println(), дело не в коде моего "полотна", а в том, как обрабатываются сразу несколько кнопок клавиатуры.

setOnKeyPressed(keyEvent -> {
    switch (keyEvent.getCode()) {
        case UP: System.out.println("UP"); break;
        case DOWN: System.out.println("DOWN"); break;
        case RIGHT: System.out.println("RIGHT"); break;
        case LEFT: System.out.println("LEFT"); break;
    }
});

Answer 1

Здесь надо использовать AnimationTimer.

boolean[] keysPressed = new boolean[4];
setOnKeyPressed(keyEvent -> {
    switch (keyEvent.getCode()) {
        case UP: keysPressed[0] = true; break;
        case DOWN: keysPressed[1] = true; break;
        case LEFT: keysPressed[2] = true; break;
        case RIGHT: keysPressed[3] = true; break;
    }
});
setOnKeyReleased(keyEvent -> {
    switch (keyEvent.getCode()) {
        case UP: keysPressed[0] = false; break;
        case DOWN: keysPressed[1] = false; break;
        case LEFT: keysPressed[2] = false; break;
        case RIGHT: keysPressed[3] = false; break;
    }
});
new AnimationTimer() {
    @Override
    public void handle(long now) {
        if (keysPressed[0]) System.out.println("UP");
        if (keysPressed[1]) System.out.println("DOWS");
        if (keysPressed[2]) System.out.println("LEFT");
        if (keysPressed[3]) System.out.println("RIGHT");
    }
}.start();
READ ALSO
Java Json десериализация только нужных данных

Java Json десериализация только нужных данных

Java Json десериализация только нужных данных Как содержимое которое находится в «Campaigns» положить как объект в массив? Желательно при помощи...

116
Юникс время в js

Юникс время в js

Хочу написать простую программу для вывода погоды и тд, но возникли трудности с выводом времени(а именно с разницей времени в часовых поясах)

120
Kак правильно выбрать дочерний элемент this?

Kак правильно выбрать дочерний элемент this?

Подскажите пожалуйста, ка правильно написать следующий код

121
arr.reduce и стрелочная функция

arr.reduce и стрелочная функция

Что делает ",0" после колбэк функции и зачем он нужен?

129