使用JavaFX检测鼠标事件
我正在Kotlin下使用JavaFX开发一个屏幕音乐键盘。使用带有适当图像的按钮将图形和布局放置到位。按钮被添加到StacKPane中的组中 我可以检测简单的鼠标按下和释放事件,以触发适当的MIDI开/关消息。到目前为止,除了键盘是单音的(一次只能演奏一个音符)外,一切都很好 我希望扩展键盘以播放多个音符。手势的顺序如下: 鼠标按初始键可触发第一个音符。如果鼠标在按下按钮的情况下输入相邻的键,则在触发新注释的同时,原始注释应继续。每当松开按钮或鼠标不再位于任何键上方时,所有注释都应停止 十年前,我使用Swing实现了类似的功能,但JavaFX事件的操作方式不同 我可以检测到最初的鼠标按下事件,但是只要按下按钮,移动到另一个键时就不会检测到鼠标插入的事件。我也尝试过MouseMoved、MouseDraggedEnterd和DragDetected,但没有成功。这就好像最初的鼠标按下事件正在阻止所有其他事件,直到按钮被释放。有什么建议吗?谢谢 代码片段使用JavaFX检测鼠标事件,javafx,Javafx,我正在Kotlin下使用JavaFX开发一个屏幕音乐键盘。使用带有适当图像的按钮将图形和布局放置到位。按钮被添加到StacKPane中的组中 我可以检测简单的鼠标按下和释放事件,以触发适当的MIDI开/关消息。到目前为止,除了键盘是单音的(一次只能演奏一个音符)外,一切都很好 我希望扩展键盘以播放多个音符。手势的顺序如下: 鼠标按初始键可触发第一个音符。如果鼠标在按下按钮的情况下输入相邻的键,则在触发新注释的同时,原始注释应继续。每当松开按钮或鼠标不再位于任何键上方时,所有注释都应停止 十年前,
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") }
}
您是否尝试在不同的线程上运行每个便笺?请参阅的文档(特别是标题为“拖动手势”的部分)和。谢谢。拖放是一种方式。即使我没有做真正的拖放操作,鼠标的手势也会模仿。让我有点吃惊的是,Dragboard必须有一些内容才能识别DnD操作。我只是使用了一个空字符串。对于将来的问题:请提供一个演示该问题的示例。您提到您使用了拖放;我可以问一下为什么吗?据我所知,您没有在任何地方传输数据。有三种拖动姿势:1)简单的按下拖动释放,2)完全按下拖动释放,以及3)拖放。从你的问题来看,我认为选项2更适合你的需要。