我已经在谷歌和这里搜索了几个小时,但没有找到任何答案这个问题。我想创建一个应用程序,它将只包含图标。它没有任何目的。这只是为了让我练习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());
删除它,它在你的代码中没有用,它只是取消Stage
的Scene
并重新设置它
希望有所帮助