2016-07-15 5 views
-1

私は2つのコントローラのメインコントローラとAddUserControllerを持っているのJavaFXを使ってデモアプリケーションを開発しようとしていますにコントローラ間で通信できません。いくつかのフィールドを持つユーザーを追加するためのウィンドウを開くボタン。したがって、ユーザーのリストはインメモリDBに含まれています。ユーザーを追加するときは、main.fxmlは、ユーザーのリストを表示するテーブルが含まれ、それらのそれぞれが独自の.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からこれを実行しようとすると

、それが働いているOK

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

助けていただきありがとうございます。そしてBTWは、投票の理由はありませんでした。あなたがもっと多くの情報を求めたいと思っているように誰かが書いたり質問したりしなかったときです。ちょうど助言、あまりにも個人的に取らないでください。 – Denees

+0

@Denees Glad私は助けることができました。まあ、確かに私は尋ねましたが、結局私は推測しなければなりませんでした。明らかに私は正しく推測しましたが、それは純粋な偶然でした... – glglgl

関連する問題