[英]Cannot communicate between controllers in JavaFX
我正在嘗試使用JavaFX開發一個演示應用程序,其中有2個控制器MainController和AddUserController,每個控制器都有其自己的.fxml文件,main.fxml包含顯示用戶列表的表,以及一個用於打開添加窗口的按鈕某些字段的用戶。 因此,用戶列表包含在內存數據庫中。
因此,在添加用戶時,表中不會包含該列表。
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();
列表在那里,到目前為止有什么問題?
//更新:
嘗試從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));
}
原因可能是您每次處理“添加用戶”事件時都在新窗格上創建了一個新控制器。 這顯然是錯誤的,因為對其所做的更改不會影響實際顯示的窗格。
相反,您應該在加載窗格時獲取控制器,將其存儲在某個地方,並在需要時引用它。
FXMLLoader myLoader = new FXMLLoader(
getClass().getResource(screen.getFile()),
resources);
Parent loadScreen = myLoader.load();
XYController myScreenController = myLoader.getController();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.