2016-10-11 56 views
0

在我的JavaFX程序到目前为止,我用最后的变量来管理尺寸如:JavaFX - CSS变量的大小?

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

像这样的计算目前是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 设置/绑定代码中的某些值。

+0

“CSS是一种在JavaFX中设计场景的好方法,但它有一些限制,但是您可以使用CSS并设置/绑定代码中的某些值。你能详细解释一下吗?谢谢。 – Hatefiend

+0

@Hatefiend特别是哪一部分?从代码和一些CSS分配一些属性的可能性?限制,例如那么不可能为'Rectangle.width'指定静态属性或属性,或者为大多数类型计算任何值,并且某些选择器(如兄弟/子编号选择器)未在JavaFX中实现? – fabian