JavaFX 控件在使用 Shape3D 时不接收鼠标事件
JavaFX controls not receiving mouse events when also using Shape3D
我正在开发一个 ScalaFX 应用程序,它在同一 window 中同时具有控件和模型(这是一个游戏)。不幸的是,当我添加模型时,即使两者不重叠,控件也会停止接收鼠标事件。最小的工作示例如下所示:
import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene._
import scalafx.scene.control._
import scalafx.scene.input.MouseEvent
import scalafx.scene.layout._
import scalafx.scene.shape._
object GameWindow extends JFXApp {
stage = new PrimaryStage {
scene = new Scene(800, 600, true, SceneAntialiasing.Balanced) {
root = new VBox(
new Button("Click me!") {
handleEvent(MouseEvent.MouseClicked) {
me: MouseEvent => Console println "clicked!"
}
},
new Sphere() {
radius = 100
})
}
}
}
如果我用二维形状替换球体,例如 Circle
或 Rectangle
,控件将再次响应;这只是我添加 3D 形状时的问题。我已尝试在 Sphere
上设置 mouseTransparent
并清除 pickOnBounds
,但似乎都不起作用。
如何让控件在点击时继续接收鼠标事件?模特没收到也是可以接受的
混合 2D(控件)和 3D 内容时,您应该将 3D 内容包裹在 SubScene
中,例如:
object GameWindow3D extends JFXApp {
stage = new PrimaryStage {
scene = new Scene(800, 600, true, SceneAntialiasing.Balanced) {
root = new VBox(
new Button("Click me!") {
handleEvent(MouseEvent.MouseClicked) {
me: MouseEvent => Console println "clicked!"
}
},
new SubScene(400, 400, true, SceneAntialiasing.Balanced) {
root = new VBox {
children = new Sphere() {
radius = 100
}
}
}
)
}
}
}
我正在开发一个 ScalaFX 应用程序,它在同一 window 中同时具有控件和模型(这是一个游戏)。不幸的是,当我添加模型时,即使两者不重叠,控件也会停止接收鼠标事件。最小的工作示例如下所示:
import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene._
import scalafx.scene.control._
import scalafx.scene.input.MouseEvent
import scalafx.scene.layout._
import scalafx.scene.shape._
object GameWindow extends JFXApp {
stage = new PrimaryStage {
scene = new Scene(800, 600, true, SceneAntialiasing.Balanced) {
root = new VBox(
new Button("Click me!") {
handleEvent(MouseEvent.MouseClicked) {
me: MouseEvent => Console println "clicked!"
}
},
new Sphere() {
radius = 100
})
}
}
}
如果我用二维形状替换球体,例如 Circle
或 Rectangle
,控件将再次响应;这只是我添加 3D 形状时的问题。我已尝试在 Sphere
上设置 mouseTransparent
并清除 pickOnBounds
,但似乎都不起作用。
如何让控件在点击时继续接收鼠标事件?模特没收到也是可以接受的
混合 2D(控件)和 3D 内容时,您应该将 3D 内容包裹在 SubScene
中,例如:
object GameWindow3D extends JFXApp {
stage = new PrimaryStage {
scene = new Scene(800, 600, true, SceneAntialiasing.Balanced) {
root = new VBox(
new Button("Click me!") {
handleEvent(MouseEvent.MouseClicked) {
me: MouseEvent => Console println "clicked!"
}
},
new SubScene(400, 400, true, SceneAntialiasing.Balanced) {
root = new VBox {
children = new Sphere() {
radius = 100
}
}
}
)
}
}
}