JavaFX-可重用的FXML组件
我正在用Scene Builder构建一个GUI,我的大多数场景都有一个共同的元素(底部有一个iOS类型的home按钮)。 我想知道是否可以在一个单独的fxml文件中定义这个组件。根据我进行的研究,声明可重用组件的过程类似,但只在同一个fxml文件中。JavaFX-可重用的FXML组件,java,user-interface,javafx,fxml,scenebuilder,Java,User Interface,Javafx,Fxml,Scenebuilder,我正在用Scene Builder构建一个GUI,我的大多数场景都有一个共同的元素(底部有一个iOS类型的home按钮)。 我想知道是否可以在一个单独的fxml文件中定义这个组件。根据我进行的研究,声明可重用组件的过程类似,但只在同一个fxml文件中。 如何将这一原则应用于几个fxml文件?这可以通过创建一个单独的fxml文件并向其中添加一个具有已知唯一Id的节点,然后通过Id访问该节点来实现,棘手的部分是如何在应用程序范围内实现这一点?可能在许多控制器中创建相同的函数,但下面是如何从FXML文
如何将这一原则应用于几个fxml文件?这可以通过创建一个单独的fxml文件并向其中添加一个具有已知唯一Id的节点,然后通过Id访问该节点来实现,棘手的部分是如何在应用程序范围内实现这一点?可能在许多控制器中创建相同的函数,但下面是如何从FXML文件中获取按钮 所有按钮执行相同的操作
Parent root = FXMLLoader.load(getClass().getResource("fileName.fxml"));
ObservableList<Node> nodes = root.getChildrenUnmodifiable();
String _id = "testButton";
for (Node node : nodes) {
if (node.getId().equals(_id)) {
return node;
}
}
return null;
}
Parent root=fxmloader.load(getClass().getResource(“fileName.fxml”);
ObservableList nodes=root.getChildrenUnmodifiable();
字符串_id=“testButton”;
用于(节点:节点){
if(node.getId().equals(_id)){
返回节点;
}
}
返回null;
}
您可以这样做:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.MainController">
<children>
<fx:include fx:id="someId" source="NestedFXML.fxml"/>
</children>
尼斯:嵌套控制器可以通过FXML注释注入。字段名必须与fx:id属性字符串+控制器匹配使用边框窗格如何。按钮将位于底部,您只需使用fxml文件更改中心。简单有效!谢谢你,我没想到这个。
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.NestedFXMLController">
</AnchorPane>
public class MainController implements Initializable {
@FXML
private NestedFXMLController someIdController;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
}
public class NestedFXMLController implements Initializable {
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
}