如何在JavaFX中创建具有透明背景的Splash屏幕

时间:2013-02-20 04:15:49

标签: java transparency javafx-2 javafx splash-screen

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

我在fxml文件中的所有内容都是带有ImageView的AnchorPane,其中包含png图像

Example

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

2 个答案:

答案 0 :(得分:20)

尝试为Stackoverflow问题创建此JavaFX splash sampleDesigning a splash screen (java)。还有follow up sample,它还提供应用程序初始化进度反馈。

JavaFX确实提供Preloader界面,以便从启动到应用程序顺利转移,但上述示例并未使用它。

上面的启动示例也没有做透明效果,但是这个dialog sample会向您展示如何执行此操作,您可以将它与之前的启动示例结合使用,以获得您想要的效果。

透明效果由:

创建
  1. stage.initStyle(StageStyle.TRANSPARENT)
  2. scene.setFill(Color.TRANSPARENT)
  3. 确保您的根节点不是不透明的方形矩形。
  4. 谢尔文的样本中都证明了这一点。

    相关问题:

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

      

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

    在Java 8u20 stage.setAlwaysOnTop(true)中创建了一个新的API。我更新了linked sample以在初始启动画面上使用它,这有助于更顺利地过渡到主屏幕。

    对于Java8 +

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

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

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

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

    见相关:

答案 1 :(得分:13)

您需要具有透明的StageScenePane本身没有颜色。

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