搜尋

首頁  >  問答  >  主體

動態修改Javafx中的內嵌CSS樣式

我試圖在應用程式最大化時更改窗格的背景圖像。我的背景是使用內嵌 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);
}

P粉311089279P粉311089279282 天前978

全部回覆(1)我來回復

  • 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 發生變化時套用。

    回覆
    2
  • 取消回覆