我正在构建的图形浏览程序遇到问题。我有两个 JavaFX 子场景,其中一个以类似于飞行模拟器的方式浏览一个非常大的图形(即图形的数学构造,而不是像折线图或饼图这样简单的东西;可能有几个千兆字节)。另一个包含一组控件,它们始终位于屏幕上的固定点。
我遇到的唯一问题是,当我尝试从主场景中获取选择结果时,它总是停在第一个子场景(平视显示器)处。我检查了 PickResult.getIntersectedNode(),肯定是 SubScene 拦截了pick。
我已经尝试过这个(可以肯定的是,在两个子场景上):
layer.setPickOnBounds(false);
但它没有任何效果。
我怀疑分层 SubScene 的某些透明部分仍在将空间划分为已占用。我不确定这一点。
如何将 SubScene 设置为不可拾取,同时保留其内容?
作为讨论的附录,这里是我(在实验中)创建的用于构建平视显示器的方法示例。这是在我将其切换为简单地返回一个窗格之前。(参数“fillPaint”始终设置为 Color.TRANSPARENT)。
/**
* Creates a subscene of set parameters
*
* @param scene
* primary scene (into which subscene is injected)
*/
private SubScene makeHeadsUpSubScene(Scene scene, Camera camera, Paint fillPaint,
Node node) {
Group root = new Group();
PointLight light = new PointLight(Color.WHITE);
light.setTranslateX(50);
light.setTranslateY(-300);
light.setTranslateZ(-400);
PointLight light2 = new PointLight(Color.color(0.6, 0.3, 0.4));
light2.setTranslateX(400);
light2.setTranslateY(0);
light2.setTranslateZ(-400);
String title = "Title Stand-in";
boolean msaa = true;
AmbientLight ambientLight = new AmbientLight(Color.color(0.2, 0.2, 0.2));
node.setRotationAxis(new Point3D(2, 1, 0).normalize());
node.setTranslateX(180);
node.setTranslateY(180);
root.getChildren().addAll(new Label(title), ambientLight, light, light2, node);
SubScene subScene = new SubScene(root, 640, 480, true, msaa ? SceneAntialiasing.BALANCED : SceneAntialiasing.DISABLED);
subScene.widthProperty().bind(scene.widthProperty());
subScene.heightProperty().bind(scene.heightProperty());
subScene.setFill(fillPaint);
subScene.setCamera(camera);
return subScene;
}