Использование констант в макете fxml - PullRequest
0 голосов
/ 27 июня 2018

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

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

1 Ответ

0 голосов
/ 27 июня 2018

Где это возможно, я рекомендую использовать таблицу стилей 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>
...