2017-09-23 88 views
0

我是Javafx,我有一個menuBar和多個場景,我可以使用MenuBar在它們之間切換,所有工作都很好,直到我嘗試單擊菜單項時嘗試做某件事除了展示現場。無法更新javafx中的另一個控制器的場景

我試圖使用方法我試圖展會現場的reload();顯示在文本字段nom一些寫作,我從我的homeController類調​​用Enfantcontroller在那裏我的菜單項的操作方法和我當我點擊菜單項時調用reload()將文本寫入enfantView方法的文本字段,但是在爲該場景加載控制器後沒有任何事情發生。這裏是我的代碼:

EnfantController類

public class EnfantController implements Initializable { 

     @FXML 
     private TextField nom; 


     /** 
     * Initializes the controller class. 
     */ 
     @Override 
     public void initialize(URL url, ResourceBundle rb) { 
      // TODO 

     } 
     public void reload() { 
       this.nom.setText("vndghj");  
     } 

} 

HomeController類

public class CrechHomeController implements Initializable { 

    /** 
    * Initializes the controller class. 
    */ 
    @FXML 
    private BorderPane borderPane; 

    private AnchorPane enfant; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     try { 
      // TODO 
      enfant = FXMLLoader.load(getClass().getResource(("/Views/Enfant.fxml"))); 


     } catch (IOException ex) { 
      Logger.getLogger(CrechHomeController.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    @FXML 
    public void enfantItemAction() throws IOException { 
     // getting the controller class and execute the reload method 

     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(getClass().getResource("/Views/Enfant.fxml")); 
     loader.load(); 

     EnfantController enfantController = loader.getController(); 
     enfantController.reload(); 
     borderPane.setCenter(enfant); 

    } 
} 

我知道我會在這裏忽視的東西,但我無法弄清楚它是什麼,幫助將不勝感激。

回答

1

您可以在initialize方法中加載fxml。

enfantItemAction中,您再次加載fxml並使用創建的控制器,而是顯示在initialize方法中創建的節點。

您需要使用在您顯示的fxml被加載時創建的控制器,例如

@FXML 
public void enfantItemAction() throws IOException { 
    // getting the controller class and execute the reload method 

    FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(getClass().getResource("/Views/Enfant.fxml")); 
    Node node = loader.load(); 

    EnfantController enfantController = loader.getController(); 
    enfantController.reload(); 
    borderPane.setCenter(node); 
} 

另外,您也可以存儲在現場裝載在initialize方法FXML文件時創建的控制器,而不是在enfantItemAction方法再次加載FXML。

相關問題