Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX-可重用的FXML组件_Java_User Interface_Javafx_Fxml_Scenebuilder - Fatal编程技术网

JavaFX-可重用的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文

我正在用Scene Builder构建一个GUI,我的大多数场景都有一个共同的元素(底部有一个iOS类型的home按钮)。 我想知道是否可以在一个单独的fxml文件中定义这个组件。根据我进行的研究,声明可重用组件的过程类似,但只在同一个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

    }
}