Maison  >  Questions et réponses  >  le corps du texte

Modifier dynamiquement les styles CSS en ligne dans Javafx

J'essaie de changer l'image d'arrière-plan d'un volet lorsque l'application est agrandie. Mon arrière-plan est défini à l'aide de CSS en ligne. J'ai configuré deux variables différentes et une instruction if pour le style. Cependant, je n'ai pas de chance de le faire changer de style.

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粉311089279212 Il y a quelques jours749

répondre à tous(1)je répondrai

  • P粉412533525

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

    Ajoutez simplement un auditeur à la scène maximizedProperty(). Les propriétés et les écouteurs sont un élément fondamental de l'API JavaFX : vous pouvez les trouver dans la documentation des standards, ou dans tout bon tutoriel JavaFX.

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

    Vous souhaiterez peut-être également définir immédiatement les styles appropriés en utilisant le code existant.

    Vous pouvez également utiliser des fixations si vous préférez :

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

    Binding remplace votre code existant ; il est appliqué immédiatement et lorsque maxmizedProperty change.

    répondre
    2
  • Annulerrépondre