到目前为止,在我的JavaFX程序中,我使用了最终变量来管理大小,例如:
final int SCENE_WIDTH = 500, SCENE_HEIGHT = 600,
ROOT_WIDTH = (int)(SCENE_WIDTH * 0.8), ROOT_HEIGHT = (int)(SCENE_HEIGHT * 0.8);
但人们告诉我,最好将GUI相关的尺寸,颜色,效果等都放在CSS文件中。
但是在我的CSS文件中,我认为不可能创建变量并根据其他变量进行更新。我如何用CSS完成上述操作?哪种方法最有意义?
答案 0 :(得分:1)
这样的计算目前是CSS 3的实验技术(见https://developer.mozilla.org/en/docs/Web/CSS/calc)。 JavaFX CSS基于CSS 2.1。
只有使用比例属性才能实现大小的任何乘法,这与将首选大小设置为计算结果的行为略有不同。
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
System.out.println("Hello World!");
});
StackPane root = new StackPane();
root.setId("root");
root.getChildren().add(btn);
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
* {
-fx-scene-width: 500;
-fx-scene-height: 600;
}
#root {
-fx-pref-width: -fx-scene-width;
-fx-pref-height: -fx-scene-height;
}
.button {
-fx-pref-width: -fx-scene-width;
-fx-pref-height: -fx-scene-height;
-fx-scale-x: 0.8;
-fx-scale-y: 0.8;
}
请注意,尝试将根的大小设置为与场景大小不同的大小似乎有点不合情理,因为Scene
会将根的大小设置为它自己的大小,而不管任何大小在根Node
上指定的约束。
CSS是在JavaFX中设置场景样式的好方法,但它有一些局限性。但是,您可以使用CSS 和设置/绑定代码中的某些值。