23

我正在尝试创建一个启动画面,就像我提供的示例一样。似乎 AnchorPane 不允许透明背景,我尝试将 css 设置为AnchorPaneto-fx-background-color: rgba(255,0,255,0.1) ;但白色背景仍然显示。

我的 fxml 文件中只有一个带有 ImageView 的 AnchorPane,其中包含 png 图像

例子

我到处寻找,但找不到任何解决方案,任何帮助将不胜感激。谢谢

4

2 回答 2

26

试试这个为 Stackoverflow 问题创建的JavaFX 启动示例: Designing a splash screen (java)。还有一个后续示例,它还提供应用程序初始化进度反馈。

JavaFX 确实提供了Preloader接口,用于从启动到应用程序的平滑传输,但上面的示例没有使用它。

上面的飞溅示例也没有做透明效果,但是这个对话框示例向您展示了如何做到这一点,您可以将它与之前的飞溅示例结合以获得您想要的效果。

透明效果由以下方式创建:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. 确保您的根节点不是不透明的方形矩形。

这一切都在 Sergey 的样本中得到了证明。

相关问题:

根据其他问题更新 2016 年 4 月

预加载器图像不在前台。我试过 stage.toFront(),但没有帮助。

在 Java 8u20 stage.setAlwaysOnTop(true)中创建了一个新的 API 。我更新了链接示例以在初始启动屏幕上使用它,这有助于更平滑地过渡到主屏幕。

对于 Java8+

对于 modena.css(Java 8 中的默认 JavaFX 外观定义),为所有控件引入了轻微的阴影背景(如果加载了控件,还为窗格引入了阴影)。

您可以通过指定默认背景是透明的来删除它。这可以通过将以下行添加到应用程序的 CSS 文件中来完成:

.root { -fx-background-color: transparent; }

如果您愿意,您可以使用 CSS 样式类和规则或 setStyle 调用(如 Sergey 的回答中所示)来确保该设置仅适用于您的初始屏幕的根而不是您的所有应用程序屏幕。

见相关:

于 2013-02-20T06:41:06.620 回答
14

你需要有透明的StageScene为此。Pane本身没有颜色。

public void start(Stage primaryStage) {
    Button btn = new Button("Say 'Hello World'");

    AnchorPane root = new AnchorPane();
    root.getChildren().add(btn);

    // Java 8: requires setting the layout pane background style to transparent
    // https://bugs.openjdk.java.net/browse/JDK-8092764
    // "Modena uses a non-transparent background by default"
    root.setStyle("-fx-background-color: transparent;"); 

    Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.setScene(scene);
    primaryStage.show();
}
于 2013-02-20T04:57:13.410 回答