JavaFX translateZ用于非根节点导致它消失

时间:2014-11-19 16:27:13

标签: javafx javafx-8

我正在尝试在VBox上使用translateZ属性将面板“移动到屏幕上”。

如果我在根节点上使用setTranslateZ(),这可以正常工作。但是如果我改变root.setTranslateZ(200);到panel.setTranslateZ(200);窗口是空白的。

public class Demo01HelloWorld3D extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Button button = new Button("Press me");

        VBox panel = new VBox(button);
        panel.setAlignment(Pos.CENTER);
        panel.setDepthTest(DepthTest.ENABLE);

        VBox root = new VBox(panel);
        root.setAlignment(Pos.CENTER);
        root.setDepthTest(DepthTest.ENABLE);
        root.setTranslateZ(200);
        // panel.setTranslateZ(200);  <== I want this to work

        Scene scene = new Scene(root, 320, 240, true);
        primaryStage.setScene(scene);
        scene.setCamera(new PerspectiveCamera(false));
        primaryStage.show();
    }

}

在根节点上设置translateZ

translating the root node work as expected

在面板节点上设置translateZ

settings the panel node causes the screen to be blank

我尝试过的事情

  • 设置depthTest属性以启用 - 虽然我不认为这是必要的,因为它默认为DepthTest.INHERIT
  • 大量搜索类似的问题!
  • 检查SCENE3D已启用 - 是的是
  • 检查translateZProperty
  • 的javadoc
  • 选中Z值小于相机clippingFar属性
  • 查看了Oracle JavaFX 3D教程 - 这并没有专门针对3D标准控件和容器等。

1 个答案:

答案 0 :(得分:2)

panel.setTranslateZ(200); panel您推动root后面的root,因此root.setStyle("-fx-background-color: transparent;");会掩盖它。

添加@Override public void start(Stage primaryStage) throws Exception { Button button = new Button("Press me"); VBox panel = new VBox(button); panel.setAlignment(Pos.CENTER); panel.setDepthTest(DepthTest.ENABLE); VBox root = new VBox(panel); root.setAlignment(Pos.CENTER); root.setDepthTest(DepthTest.ENABLE); root.setStyle("-fx-background-color: transparent;"); panel.setTranslateZ(200); Scene scene = new Scene(root, 320, 240, true); primaryStage.setScene(scene); scene.setCamera(new PerspectiveCamera(false)); primaryStage.show(); } 并运行:

{{1}}