我有一个舞台,并将其风格设置为
stage.initStyle(StageStyle.TRANSPARENT);
几秒钟之后,我需要将initStyle改为装饰,但是当我使用
时stage.initStyle(StageStyle.Decorate );
给我这个例外
java.lang.IllegalStateException: Cannot set style once stage has been set visible
任何想法?
答案 0 :(得分:7)
什么不该做
正如例外所说,你
一旦舞台设置为可见,就无法设置样式
所以,如果你不能这样做,不要试图这样做。
该怎么做
相反,隐藏透明舞台并使用新样式创建一个新舞台。 这样做时要小心,因为默认行为是在隐藏所有阶段后关闭JavaFX系统。要避免这种情况,请关闭默认行为并在需要时显式关闭JavaFX系统,或确保始终至少有一个Window可见。
示例强>
// initialize your splash stage.
Platform.setImplicitExit(false);
splashStage.initStyle(StageStyle.TRANSPARENT);
. . .
// create your main stage.
Stage mainStage = new Stage();
mainStage.setScene(mainScene);
mainStage.initStyle(StageStyle.DECORATED);
mainStage.setOnHide(event -> Platform.exit())
. . .
// on some later event hide your splash stage and show your main stage.
splashStage.hide();
mainStage.show();
相关强>
以下是基于对上一个问题的回答的full executable sample => How to create Splash screen with transparent background in JavaFX