Heim  >  Fragen und Antworten  >  Hauptteil

Ändern Sie Inline-CSS-Stile in Javafx dynamisch

Ich versuche, das Hintergrundbild eines Bereichs zu ändern, wenn die App maximiert ist. Mein Hintergrund wird mit Inline-CSS festgelegt. Ich habe zwei verschiedene Variablen und eine if-Anweisung für den Stil eingerichtet. Es gelingt mir jedoch nicht, den Stil zu ändern.

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);
}

P粉311089279P粉311089279215 Tage vor754

Antworte allen(1)Ich werde antworten

  • P粉412533525

    P粉4125335252024-04-07 19:47:58

    只需向舞台的 maximizedProperty() 添加一个侦听器即可。属性和侦听器是 JavaFX API 的基本部分:您可以在 标准文档,或任何好的 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 发生变化时应用。

    Antwort
    2
  • StornierenAntwort