JavaFX — переменные CSS для размеров?

#java #css #javafx

#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);
  

Но люди сказали мне, что лучше всего иметь связанные с графическим интерфейсом размеры, цвета, эффекты и т. Д., Чтобы Все было в файле CSS.

Но в моем CSS-файле я не думаю, что возможно создавать переменные и обновлять их на основе других переменных. Как бы я выполнил вышеуказанное с помощью CSS? Какой метод имеет наибольший смысл?

Ответ №1:

Подобные вычисления в настоящее время являются экспериментальной технологией для CSS 3 (см. https://developer.mozilla.org/en/docs/Web/CSS/calc ). JavaFX CSS основан на CSS 2.1.

Любое умножение размера возможно только с использованием свойств scale, и это будет немного отличаться от установки предпочтительного размера в результате вычисления.

 @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 и устанавливать / привязывать некоторые значения из кода.

Комментарии:

1. «CSS — хороший способ стилизации сцены в JavaFX, но у него есть некоторые ограничения. Однако вы можете использовать CSS и устанавливать / привязывать некоторые значения из кода. » Не могли бы вы подробнее остановиться на этом? Спасибо.

2. @Hatefiend В какой части, в частности? Возможность присваивать некоторые свойства из кода, а некоторые из CSS? Ограничения, например, в том, что невозможно назначить статические свойства или свойства, подобные Rectangle.width или вычислять какие-либо значения для большинства типов, и что некоторые селекторы, такие как селекторы родственных / дочерних чисел, не реализованы в JavaFX?