在fxml布局中使用常量

时间:2018-06-27 10:25:07

标签: java javafx constants fxml

在我的FXML项目中,我不想对布局中的所有常量进行硬编码。诸如边距和填充之类的简单内容。我宁愿将它们全部放在一个地方。我该怎么办?

我可以使用常量创建类并在fxml布局中访问它们吗?我知道fx:define,但我必须在每个fxml文件中重复此操作。还是有一种方法可以在中央文件中进行fx:define并将其附加到我的所有fxml布局中?或者也许有一些与我用于内部化的资源包类似的东西?

1 个答案:

答案 0 :(得分:5)

我建议尽可能使用CSS样式表。

css中的所有属性都没有等效项。对于那些对象,您可以在调用load之前初始化FXMLLoader.namespace映射。 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>