Обнаружение событий мыши с помощью JavaFX - PullRequest
0 голосов
/ 08 сентября 2018

Я разрабатываю экранную музыкальную клавиатуру с использованием JavaFX под Kotlin. Графика и макет на месте с помощью кнопок с соответствующими изображениями. Кнопки добавляются в группу, которая находится в StacKPane.

Я могу обнаружить простые события нажатия и отпускания мыши для запуска соответствующих сообщений включения / выключения MIDI На данный момент все работает нормально, за исключением того, что клавиатура однотонная (IE может играть только одну ноту за раз).

Я хочу расширить клавиатуру для воспроизведения нескольких нот. Последовательность жестов следующая: Нажатие мышью на начальную клавишу запускает первую ноту. Если мышь вводит соседнюю клавишу с нажатой кнопкой вниз, исходная заметка должна продолжаться, пока запускается новая заметка. Когда кнопка отпущена или мышь не находится над клавишей, все заметки должны прекратиться.

Я реализовал нечто подобное десять лет назад, используя Swing, но события JavaFX не работают так же.

Я могу обнаружить начальное событие нажатия мыши, однако, пока кнопка нажата, события MouseEntered не обнаруживаются при переходе к другой клавише. Я также попытался MouseMoved, MouseDraggedEnterd и DragDetected без удачи. Это как если бы исходное событие MousePressed блокировало все остальные события, пока кнопка не будет отпущена. Какие-либо предложения? Спасибо

Фрагмент кода

 fun setKeyListeners(b: Button, keynumber: Int) {
      b.setOnMousePressed { _ ->
            node as VirtualKeyboard
            val velocity = 64
            node.triggerOn(keynumber, velocity)
            status("key: ${node.lastKeynumber} vel: ${node.lastVelocity}")
        }

        b.setOnMouseReleased { _ ->
            node as VirtualKeyboard
            node.triggerOff(keynumber)
        }

        // b.setOnMouseMoved { _ -> println("Moved $keynumber") }
        // b.setOnMouseDragged { _ -> println("Dragged $keynumber") }
        // b.setOnMouseEntered { _ -> println("Entered $keynumber") }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...