2016-07-15 48 views
-1

我試圖開發使用JavaFX在那裏我有2個控制器MainController和AddUserController一個演示應用程序控制器之間的溝通,他們每個人都有自己的.fxml文件,main.fxml包含顯示用戶清單表,和一個按鈕,打開窗口用於添加一些字段的用戶。因此,用戶列表包含在內存數據庫中。無法在JavaFX的

所以添加用戶當表中不填充列表。

MainController.java

public void setTestUser(){ 
    List<Users> users = new ArrayList(); 
    Users user = new Users(); 
    user.setName("Name"); 
    user.setSurname("Surname"); 
    users.add(user); 
    name.setCellValueFactory(new PropertyValueFactory<Users, String>("name")); 
    surname.setCellValueFactory(new PropertyValueFactory<Users, String>("surname")); 
    usersTable.setItems(FXCollections.observableArrayList(users)); 
} 

AddUserController.java

private void handleAddUser(ActionEvent event) throws IOException { 

    FXMLLoader fxmlLoader = new FXMLLoader(); 
    fxmlLoader.load(getClass().getResource("/fxml/main.fxml").openStream()); 
    MainController mainController = fxmlLoader.getController(); 

    Users user = new Users(); 
    user.setName(name.getText()); 
    user.setSurname(surname.getText()); 
    user.setDateOfBirth(dateOfBirth.getValue().toString()); 

    usersService.add(user); 

    mainController.populateUsersTable(); 
} 

將不會更新表的用戶,但如果我嘗試usersTable.getItems();名單是存在的,有什麼問題,所以後遠?

// UPDATE:

試圖從MainController.java執行此,它是工作正常

public void setTestUser(){ 
     List<Users> users = new ArrayList(); 
     Users user = new Users(); 
     user.setName("Name"); 
     user.setSurname("Surname"); 
     users.add(user); 
     name.setCellValueFactory(new PropertyValueFactory<Users, String>("name")); 
     surname.setCellValueFactory(new PropertyValueFactory<Users, String>("surname")); 
     usersTable.setItems(FXCollections.observableArrayList(users)); 
    } 
+0

的GUI不會刷新? –

+0

是的,你是對的 – Denees

+0

你的代碼是不完整的,它絕對是從哪裏叫什麼。 – glglgl

回答

2

的原因可能是你在一個新窗格創建一個新的控制器每次處理時間一個「添加用戶」事件。這顯然是錯誤的,因爲它的更改不會影響實際顯示的窗格。

相反,你應該得到的,當你加載你的窗格中,它存儲在某處,並指它,只要你需要它的控制器。

FXMLLoader myLoader = new FXMLLoader(
       getClass().getResource(screen.getFile()), 
       resources); 
Parent loadScreen = myLoader.load(); 
XYController myScreenController = myLoader.getController(); 
+0

感謝您的幫助,它的工作原理。順便說一句,沒有理由拒絕投票,因爲有人不寫或不問你想要的更多信息。只是一個建議,不要太個人化。 – Denees

+0

@Denees很高興我能幫到你。那麼,我確實問過,最後我不得不猜測。很明顯,我猜對了,但這純粹是巧合。 – glglgl