2013-11-04 377 views
0

我有一個borderpane,我加載了一個fxml(別名FirstPanel),裏面有相對控制器,並位於中心。 fxml包含一個TableView和一個按鈕,它應該加載另一個fxml(別名SecondPanel)和相對控制器,而不是第一個面板。基本上,SecondPanel需要顯示關於表中所選數據的一些細節。JavaFX加載母公司控制器內的FXML

是否可以做到這一點?我如何獲得我的FirstPanel的父級,並將其用於SecondPanel而不是第一個?

UPDATE

我已經嘗試了許多解決方案,但沒有達到我的目標。應用程序加載僅包含象父控制一個AnchorPane的UsersMainPageController,所以這是相對的代碼:

[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與包含與TableView中的相對控制器UsersListController調用UsersList.fxml一些記錄和一些按鈕。當我點擊一個特定的按鈕時,它應該使用相對控制器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(); 
    } 
} 

當我從UsersListControllerButtonEdit點擊加載UsersManageController,我得到這個錯誤:

Caused by: java.lang.NullPointerException 
    at postoffice.multiuser.UsersListController.handleButtonAggiornaAction(UsersListController.java:210) 
    ... 50 more 
+1

我們可以幫助您更好,如果你給我們你的代碼的一些相關部分。 – mathielo

回答

0

你可以將你的孩子fxml添加到父項中控制器..

1.first只需要一個錨點窗格,並設置它的邊界,你想放你的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(); 
    } 
}