使用JavaFX检测鼠标事件

时间:2018-09-08 11:41:40

标签: javafx

我正在Kotlin下使用JavaFX开发屏幕音乐键盘。使用带有适当图像的按钮可以放置图形和布局。这些按钮将添加到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") }
    }

0 个答案:

没有答案