我有一个borderpane,我正在加载一个fxml(别名FirstPanel),其中包含相对控制器并位于中心。 fxml包含一个TableView和一个按钮,它应该加载另一个fxml(别名SecondPanel)和相对控制器而不是第一个面板。基本上,SecondPanel需要显示有关表中所选数据的一些细节。
有可能吗?如何获取FirstPanel的父级并将其用于SecondPanel而不是第一个?
更新
我尝试了很多解决方案,但没有达到我的目标。应用程序加载UsersMainPageController,它只包含像父控件一样的AnchorPane,因此这是相对代码:
[UsersMainPageController]
public class UsersMainPageController implements Initializable {
private PostOffice application;
@FXML
private AnchorPane ParentControl;
public void setApp(PostOffice application){
this.application = application;
}
public void loadPage(String pageName) {
try {
URL url = getClass().getResource(pageName);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream());
ParentControl.getChildren().clear();///name of pane where you want to put the fxml.
ParentControl.getChildren().add(page);
}
catch (IOException e) {
e.printStackTrace();
}
}
public void loadManageUsers () {
loadPage("UsersManage.fxml");
}
public void loadListUsers () {
loadPage("UsersList.fxml");
}
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
loadListUsers();
}
}
loadListUsers使用相对控制器UsersListController调用UsersList.fxml,该控件包含带有一些记录和一些按钮的TableView。当我单击一个特定按钮时,它应该调用带有相对控制器UsersManageController的loadManageUsers,它包含一些用于编辑数据和插入新用户的字段。编辑或插入用户时,它应该能够使用TableView返回上一页并清除当前页面(在本例中为UsersManageController)。
[UsersListController]
public class UsersListController implements Initializable {
private UsersMainPageController mainController;
@FXML
private void handleButtonEditAction(ActionEvent event) throws IOException {
mainController.loadManageUsers();
}
}
[UsersManageController]
public class UsersManageController implements Initializable {
private UsersMainPageController mainController;
@FXML
private void handleButtonBackAction(ActionEvent event) throws IOException {
mainController.loadListUsers();
}
}
当我点击UsersListController
ButtonEdit
加载UsersManageController
时,我收到此错误:
Caused by: java.lang.NullPointerException
at postoffice.multiuser.UsersListController.handleButtonAggiornaAction(UsersListController.java:210)
... 50 more
答案 0 :(得分:0)
您可以将您的孩子fxml添加到父控制器..
1.首先只需要一个锚定窗格并设置你想要放置FXML代码的界限。
现在试试这个......
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
openNewWindow("Example.fxml");
}
});
你可以将fxml名称传递给函数...
public void openNewWindow(String FXMLFile)
{
//ChildNode child;
try {
URL url = getClass().getResource(FXMLFile);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream());
anchor.getChildren().clear();///name of pane where you want to put the fxml.
anchor.getChildren().add(page);
}
catch (IOException e) {
e.printStackTrace();
}
}