Javafx:在运行时更改内嵌的css样式

imzjd6km  于 2023-04-01  发布在  Java
关注(0)|答案(1)|浏览(201)

我试图在应用程序最大化时更改窗格的背景图像。我的背景是使用内嵌css设置的。我为样式设置了两个不同的变量,并设置了一个if语句。但是,我没有任何运气让它更改样式。

String cssStyle = "-fx-background-image: url(\'file:images/poker_table.png\');" +
                 "-fx-background-position: center center;" +
                 "-fx-background-radius: 15;" + // ************* For rounded corners
                 "-fx-background-size: 100% 100%;";
String cssStyle2 = "-fx-background-image: url(\'file:images/poker_table.jpg\');" +
                  "-fx-background-position: center center;" +
                  "-fx-background-radius: 15;" +
                  "-fx-background-size: 100% 100%;";
if (!primaryStage.isMaximized())
{   gameScreen.setStyle(cssStyle);
}
else
{   gameScreen.setStyle(cssStyle2);
}
ulydmbyx

ulydmbyx1#

只需将监听器添加到舞台的maximizedProperty()。属性和监听器是JavaFX API的基本组成部分:你可以在standard documentation或任何好的JavaFX教程中阅读它们。

primaryStage.maximizedProperty().addListener((obs, wasMaximized, isNowMaximized) -> {
    if (isNowMaximized) {
        gameScreen.setStyle(cssStyle2);
    } else {
        gameScreen.setStyle(cssStyle);
    }
});

您可能还需要使用已有的代码立即设置适当的样式。
如果您愿意,也可以使用绑定:

gameScreen.styleProperty().bind(Bindings.createStringBinding(
    () -> primaryStage.isMaximized() ? cssStyle2 : cssStyle,
    primaryStage.maximizedProperty()
);

绑定可以替换你已经拥有的代码;它将被立即应用以及在maxmizedProperty改变的任何时候应用。

相关问题