一旦阶段设置可见,无法设置样式

3 javafx

我有一个舞台,并设置它的风格

stage.initStyle(StageStyle.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

几秒钟之后,我需要将initStyle改为装饰,但是当我使用时

stage.initStyle(StageStyle.Decorate );
Run Code Online (Sandbox Code Playgroud)

给我这个例外

java.lang.IllegalStateException: Cannot set style once stage has been set visible
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

jew*_*sea 8

什么不该做

正如例外所说,你

一旦阶段设置可见,无法设置样式

所以,如果你不能这样做,不要试图这样做.

该怎么办

相反,隐藏透明舞台并使用新样式创建一个新舞台.这样做时要小心,因为默认行为是在隐藏所有阶段后关闭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();  
Run Code Online (Sandbox Code Playgroud)

有关

以下是基于对上一个问题的回答的完整可执行示例 => 如何在JavaFX中创建具有透明背景的启动画面.