是否有一种方法可以防止透明的舞台+场景出现在前几毫秒



我已经在谷歌和这里搜索了几个小时,但没有找到任何答案这个问题。我想创建一个应用程序,它将只包含图标。它没有任何目的。这只是为了让我练习JavaFX。但我不明白为什么有一个可见的窗口,即使我设置为透明。

正如你在这里看到的,这就是我要做的。这就是,当我启动应用程序时,它应该是什么样子的(正如我所说,它只是一个没有目的的随机图标…还在学习,这是我的实践项目)。但由于某些原因,它将加载一个舞台/场景几毫秒,这将创建一个"一次性闪烁"的效果。这就是窗户的样子。这只是我如何设置舞台/场景(它这么大只是为了看得更清楚,它是半透明的,因为它太快了,我无法创建一个更好的截图:)但是没有透明设置。下面是我的代码:

public class MainNotification extends Application {
public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage = new Stage(StageStyle.TRANSPARENT);
    GridPane pane = new GridPane();
    Scene scene = new Scene(pane);
    scene.setFill(Color.TRANSPARENT);
    primaryStage.setScene(scene);
    TestPloppingWindow.build(primaryStage);
    primaryStage.show();
}

}

:

public class TestPloppingWindow {
private static boolean isBuild;
private static double posX = 100;
private static double posY = 100;
public static Stage build(Stage stage) {
    if (!isBuild()) {
        GridPane pane = (GridPane) stage.getScene().getRoot();
        ImageView image = new ImageView(
                new Image(MainNotification.class.getResourceAsStream("/Ressource/icon.png"), 100, 100,
                        true, true));
        image.setOnMouseClicked(e -> {
            biggerIcons();
        });
        pane.getChildren().add(image);
        pane.setAlignment(Pos.CENTER);
        stage.setScene(stage.getScene());
        pane.setPrefSize(500, 250);
        setBuild(true);
    }
    return stage;
}
public static void biggerIcons() {
    Stage stage = new Stage(StageStyle.TRANSPARENT);
    stage.setX(posX = posX + 100);
    stage.setY(posY = posY + 100);
    GridPane pane = new GridPane();
    Scene scene = new Scene(pane, Color.TRANSPARENT);
    stage.setScene(scene);
    ImageView view = new ImageView(
            new Image(TestPloppingWindow.class.getResourceAsStream("/Ressource/icon.png")));
    pane.getChildren().add(view);
    stage.show();
}
public static boolean isBuild() {
    return isBuild;
}
private static void setBuild(boolean isBuild) {
    TestPloppingWindow.isBuild = isBuild;
}

}

每当我点击小图标,一个更大的图标会出现(biggerIcons()),在那里,我没有这个问题。它平滑地淡出,没有任何舞台/场景闪烁问题。有人知道怎么解决吗?

你好,先生,这个代码stage.setScene(stage.getScene());,我发现很难理解,也是这个代码

if (!isBuild()) {
   ....
  setBuild(true);
}
return stage;

这里的逻辑对我来说不是很(我不明白)。不需要返回Stage

它将加载一个舞台/场景几毫秒,这将创建一个"一次性闪烁"的效果

这是因为这个stage.setScene(stage.getScene());删除它,它在你的代码中没有用,它只是取消StageScene并重新设置它

希望有所帮助

最新更新