有没有办法在一个fxml文件中添加两个控制器?

时间:2017-01-26 22:09:12

标签: javafx

我的应用程序有一个主面板,用于管理(setVisible())其中添加的所有其他面板,这些其他面板具有组件。问题是添加控制器时。我想为每个面板添加一个不同的控制器,但是以传统的方式我没有得到它。有办法解决这个问题吗?

printscreen

2 个答案:

答案 0 :(得分:1)

通常,FXML文件和控制器类之间以及FXML文件和控制器实例定义的UI层次结构实例之间应该有一对一的对应关系。

如果你想模块化控制器,你也应该模块化FXML文件。

执行此操作的一种方法是使用<fx:include>

<!-- xml headers, imports, etc -->

<BorderPane fx:controller="com.example.MainController">
    <top>
        <fx:include source="header.fxml" fx:id="header" />
    </top>

    <center>
        <!-- ... -->
    </center>

    <bottom>
        <fx:include source="footer.fxml" fx:id="footer" />
    </bottom>

</BorderPane>

然后在header.fxml:

<HBox fx:controller="com.example.HeaderController"/>
    <!-- ... -->
</HBox>

主控制器可以引用&#34;包含的控制器&#34;:

public class MainController {

    @FXML
    // field name is fx:id+"Controller":
    private HeaderController headerController ; 

    // etc
}

答案 1 :(得分:0)

您可以定义父控制器和FXML。然后在其中你可以加载像这样的子部分......

@FXML
private Pane childPane;

@FXML
public void initialize() { 
    try { 
        FXMLLoader loader = new FXMLLoader();
        Parent node = loader.load(getClass().getClassLoader().getResource("some.fxml").openStream());
        My Controller childController = loader.getController();
        childPane.getChildren().setAll(node);

     ......
    }catch (Exception e) {
    }
}