在我的FXML项目中,我不想对布局中的所有常量进行硬编码。诸如边距和填充之类的简单内容。我宁愿将它们全部放在一个地方。我该怎么办?
我可以使用常量创建类并在fxml布局中访问它们吗?我知道fx:define,但我必须在每个fxml文件中重复此操作。还是有一种方法可以在中央文件中进行fx:define并将其附加到我的所有fxml布局中?或者也许有一些与我用于内部化的资源包类似的东西?
答案 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();
}
<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>