Использование констант в макете fxml

В моем проекте FXML я не хочу жестко кодировать все константы в моем макете. Простые вещи, такие как поля и отступы. Я бы предпочел хранить их все в одном месте. Как бы я это сделал?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
345
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По возможности я рекомендую использовать таблицу стилей 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();
}

test.fxml

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

Другие вопросы по теме