Вот мой код, я пытаюсь загрузить изображение с заставкой с прозрачным фоном перед началом моей основной стадии. Они приходят почти в одно и то же время, но большая проблема заключается в том, что я получаю серый прямоугольник раньше всего: .Я не могу получить прозрачный этап в JavaFX
Вот код:
public class Menu extends Application {
private Pane splashLayout;
private Stage mainStage;
private ImageView splash;
// Creating a static root to pass to ScreenControl
private static BorderPane root = new BorderPane();
public void start(Stage splashStage) throws IOException {
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.splash = new ImageView(new Image(getClass().getResource("/splash.png").toString()));
splashStage.initStyle(StageStyle.TRANSPARENT);
showSplash(splashStage, screenSize);
// Constructing our scene using the static root
root.setCenter(new ScrollPane);
Scene scene = new Scene(root, screenSize.getWidth(), screenSize.getHeight());
showMainStage(scene);
if (splashStage.isShowing()) {
mainStage.setIconified(false);
splashStage.toFront();
FadeTransition fadeSplash = new FadeTransition(Duration.seconds(1.5), splashLayout);
fadeSplash.setDelay(Duration.seconds(3.5));
fadeSplash.setFromValue(1.0);
fadeSplash.setToValue(0.0);
fadeSplash.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
splashStage.hide();
}
});
fadeSplash.play();
}
}
private void showMainStage(Scene scene) {
mainStage = new Stage(StageStyle.DECORATED);
mainStage.setTitle("book-depot");
mainStage.getIcons().add(new Image(getClass().getResourceAsStream("/icon.png")));
mainStage.setScene(scene);
mainStage.show();
}
private void showSplash(Stage splashStage, Dimension screenSize) {
splashLayout = new StackPane();
splashLayout.setStyle("-fx-background-color: transparent;");
splashLayout.getChildren().add(splash);
Scene splashScene = new Scene(splashLayout, 690, 590);
splashScene.setFill(Color.TRANSPARENT);
splashStage.setScene(splashScene);
splashStage.show();
}
public void mainGui(String[] args) {
launch(args);
}
}
я делаю что-то не так, или я действительно не могу получить прозрачный фон?
Это то, на что похоже, когда наступает другая сцена, но я бы хотел, чтобы она работала так же, как до загрузки основной сцены, или, по крайней мере, я хочу удалить серый прямоугольник, который вы можете видеть в другой снимок экрана
Вы можете превратить это в MCVE, что каждый может начать без проблем? Первое, что приходит на ум, это то, что вы должны установить цвет сцены прозрачным. Но я не могу проверить это, так как ваш код не обладает минимальностью и полнотой. – Roland
Вы правы, мне очень жаль. Я немного упростил код, но в следующий раз я задам вопрос, который я буду иметь в виду с самого начала. – Andrea