如何设置弹出背景透明的Java Fx?

问题描述 投票:2回答:1

我试图从我的javaFx应用程序中显示一个成功信息的gif。

public static void successGif() {
    int size = 400;
    ImageView splash = new ImageView(new Image("file:src/main/resources/img/success3.gif"));
    splash.setStyle("-fx-background-color: transparent;");
    splash.setFitWidth(size);
    splash.setFitHeight(size);
    splash.setPickOnBounds(true);
    Pane splashLayout = new Pane();
    splashLayout.getChildren().add(splash);
    final Stage initStage = new Stage();
    Scene successScene = new Scene(splashLayout, size, size);
    successScene.setFill(Color.TRANSPARENT);
    initStage.initStyle(StageStyle.TRANSPARENT);
    initStage.setWidth(size);
    initStage.setHeight(size);
    initStage.setScene(successScene);
    initStage.show();
    new Thread(() -> {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Platform.runLater(initStage::close);

    }).start();
}

上面的函数可以成功地创建一个带有gif的弹出窗口。目前,我试着在我的应用程序中通过一个按钮调用这个函数,弹出窗口的背景仍然是白色的。但是当我在应用程序的start()函数中调用同样的函数进行测试时,它的工作原理和预期的一样。

我需要在我的应用程序里面多次调用这个函数。

如何使背景透明。

下面是gif图,如果你需要的话可以试试,谢谢。

enter image description here

java javafx gif
1个回答
3
投票

你可以使用 javafx.scene.Group 而不是直接在场景中添加flash layout,你可以改变你的void方法。successGif() 到:

public static Stage successGif() {
    int size = 600;
    ImageView splash = new ImageView(new
    Image("file:src/main/resources/img/success3.gif"));
    splash.setStyle("-fx-background-color: transparent;");
    splash.setFitWidth(size);
    splash.setFitHeight(size);
    splash.setPickOnBounds(true);
    Pane splashLayout = new Pane();
    splashLayout.getChildren().add(splash);
    final Stage initStage = new Stage();
    Group group = new Group();
    group.getChildren().add(splashLayout);
    //        group.setStyle("-fx-background-color: transparent");
    Scene successScene = new Scene(group, size, size);
    successScene.setFill(Color.TRANSPARENT);
    initStage.initStyle(StageStyle.TRANSPARENT);
    initStage.setWidth(size);
    initStage.setHeight(size);
    initStage.setScene(successScene);
    initStage.setAlwaysOnTop(true);
    initStage.show();
    return initStage;
}

然后如果你想要Stage对象,那么你可以直接从方法

© www.soinside.com 2019 - 2024. All rights reserved.