JavaFX - 大小的CSS变量?

时间:2016-10-11 01:19:38

标签: java css javafx

到目前为止,在我的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完成上述操作?哪种方法最有意义?

1 个答案:

答案 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 设置/绑定代码中的某些值。