В моем проекте FXML я не хочу жестко кодировать все константы в моем макете. Простые вещи, такие как поля и отступы. Я бы предпочел хранить их все в одном месте. Как бы я это сделал?
Могу ли я создать класс с константами и получить к ним доступ в моих макетах fxml? Я знаю о fx: define, но мне пришлось бы повторять это в каждом файле fxml. Или есть способ fx: define в центральном файле и добавить его во все мои макеты fxml? Или, может быть, есть что-то похожее на пакеты ресурсов, которые я использую для интернализации?




По возможности я рекомендую использовать таблицу стилей CSS.
Однако в css нет эквивалента для всех свойств. Для них вы можете инициализировать карту FXMLLoader.namespace перед вызовом load. Записи namespace можно использовать так, как если бы они были определены с помощью ключа записи как fx:id:
@Override
public void start(Stage primaryStage) throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml"));
// initialize namespace
Map<String, Object> namespace = loader.getNamespace();
namespace.put("a", 10d);
namespace.put("b", 20d);
Scene scene = new Scene(loader.load());
primaryStage.setScene(scene);
primaryStage.show();
}
<Pane prefHeight = "400.0" prefWidth = "600.0" xmlns:fx = "http://javafx.com/fxml/1">
<children>
<Rectangle x = "$a" y = "10" width = "20" height = "20">
<fill>
<Color fx:constant = "BLUE"/>
</fill>
</Rectangle>
<Rectangle x = "$b" y = "30" width = "20" height = "20">
<fill>
<Color fx:constant = "RED"/>
</fill>
</Rectangle>
</children>
</Pane>