#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?