Maison > Questions et réponses > le corps du texte
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粉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.