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