Как установить прозрачный фон всплывающего окна Java Fx - PullRequest
4 голосов
/ 05 мая 2020

Я пытаюсь показать gif-сообщение об успешном выполнении из моего приложения javaFx.

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 () приложения, она заработала, как ожидалось. как я могу исправить эту проблему?

Мне нужно вызывать эту функцию внутри моего приложения во многих случаях.

Как сделать фон прозрачным.

Ниже приведена гифка на случай, если вам нужно попробовать, спасибо.

enter image description here

1 Ответ

3 голосов
/ 05 мая 2020

Вы можете использовать javafx.scene.Group вместо добавления макета spla sh непосредственно в сцену. Вы можете изменить свой метод 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 объект, то вы можете просто получить возвращенный объект из метода

...