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

时间:2014-05-06 19:52:32

标签: javafx

我有一个舞台,并将其风格设置为

stage.initStyle(StageStyle.TRANSPARENT);

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

stage.initStyle(StageStyle.Decorate );

给我这个例外

java.lang.IllegalStateException: Cannot set style once stage has been set visible

任何想法?

1 个答案:

答案 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