当使用Shape3D时,JavaFX控制不接收鼠标事件

时间:2016-07-26 00:50:59

标签: java scala javafx scalafx

我正在开发一个ScalaFX应用程序,该应用程序在同一个窗口中同时拥有控件和模型(这是一个游戏)。不幸的是,当我添加模型时,控件会停止接收鼠标事件,即使这两个事件没有重叠。最小的工作示例如下所示:

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
        })
    }
  }
}

如果我用2D形状替换球体,例如CircleRectangle,控件会再次响应;添加3D形状时,这只是一个问题。我尝试在mouseTransparent上设置pickOnBounds并清除Sphere,但似乎都不起作用。

如何让控件在单击时继续接收鼠标事件?模型可以接收它们。

1 个答案:

答案 0 :(得分:1)

混合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 } } } ) } } }