透明节点背景

时间:2015-03-12 08:22:23

标签: javafx javafx-2 javafx-8

如何以编程方式使Node的背景透明 - (见下);我目前正在使用AnchorPane作为其他ProgressIndicator和其他节点作为子节点的父节点,我想让它们脱颖而出?我尝试使用Scene并且它并不接近我想要的任何解决方法?

让我们说

// suppose i have a fake layout like this
    AnchorPane ap = new AnchorPane();

    ProgressIndicator pi = new ProgressIndicator();
    ProgressIndicator pii = new ProgressIndicator();
    ProgressIndicator piii = new ProgressIndicator();
    ProgressIndicator piiii = new ProgressIndicator();
    AnchorPane.setRightAnchor(pi, 0.0);
    AnchorPane.setBottomAnchor(piii, 0.0);
    AnchorPane.setRightAnchor(piiii, 0.0);
    AnchorPane.setBottomAnchor(piiii, 0.0);
    AnchorPane.setLeftAnchor(piii, 0.0);
    Circle circle = new Circle();
    circle.setRadius(50);
    circle.setFill(Color.RED);
    AnchorPane.setBottomAnchor(circle, 210.0);
    AnchorPane.setTopAnchor(circle, 210.0);
    AnchorPane.setLeftAnchor(circle, 210.0);
    AnchorPane.setRightAnchor(circle, 210.0);
    ap.getChildren().addAll(pi,pii,piii,circle,piiii);
    primaryStage.setScene(new Scene(ap,500,500));
    primaryStage.initStyle(StageStyle.UNDECORATED);
    primaryStage.show();

我的要求是让我的孩子Nodes脱颖而出,没有AnchorPane的白色背景 - (所以AnchorPane需要透明),我该如何实现?

2 个答案:

答案 0 :(得分:9)

包括StageSceneLayout Containers在内的所有内容都有其背景色。因此,如果您需要完整的透明背景,则需要将transparent fill设置为每个。

舞台

primaryStage.initStyle(StageStyle.TRANSPARENT);

适合场景

scene.setFill(Color.TRANSPARENT);

容器

container.setBackground(Background.EMPTY);

代码

Scene scene = new Scene(ap,500,500);
scene.setFill(Color.TRANSPARENT);
ap.setBackground(Background.EMPTY);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setScene(scene);

答案 1 :(得分:0)

您应该首先了解JavaFX视图层次结构的工作原理。首先,你有一个Stage。在某个阶段,您可以显示Scene。在场景中,您可以嵌入Node,它通常是一个窗格或排序,如BorderPane。在这种情况下,您应该使窗格透明,因为它是舞台场景的内容。

使用setStyle("-fx-background-color: transparent;");,或者更好:将其添加到css文件中的类,将该css文件设置为包含Node的场景的样式表,并将css类添加到{节点的{1}}。