在fxml布局中使用常量

sez*_*i80 0 java javafx constants fxml

在我的FXML项目中,我不想硬编码布局中的所有常量.边距和填充等简单的东西.我宁愿把它们放在一个地方.我该怎么办?

我可以使用常量创建一个类并在我的fxml布局中访问它们吗?我知道fx:define但我必须在每个fxml文件中重复这个.或者有没有办法fx:在中央文件中定义并将其附加到我的所有fxml布局?或者也许有类似于我用于内化的资源包?

fab*_*ian 5

在哪里我建议使用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();
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)