Javafx 如何在从其他控制器添加新数据时更新tableview

Javafx 如何在从其他控制器添加新数据时更新tableview,javafx,tableview,fxml,Javafx,Tableview,Fxml,我有两个控制器,一个控制器有一个表视图,列出所有成员,另一个控制器允许添加成员。添加成员时,我无法更新表。我使用两个已经提供给我的模型,所以我不会更改模型中的任何内容 每个成员都有一个id和一个profession,我使用cellValueFactory列出成员。我尝试将侦听器添加到cellValueFactoryProperties中,如下所示: idColumn.cellValueFactoryProperty().addListener((obs, oldV, newV) -> me

我有两个控制器,一个控制器有一个表视图,列出所有
成员
,另一个控制器允许添加
成员
。添加
成员时,我无法更新表。我使用两个已经提供给我的模型,所以我不会更改模型中的任何内容

每个
成员
都有一个
id
和一个
profession
,我使用
cellValueFactory
列出
成员
。我尝试将
侦听器添加到
cellValueFactoryProperties
中,如下所示:

idColumn.cellValueFactoryProperty().addListener((obs, oldV, newV) -> memberTv.refresh());
但它仍然不显示新的
成员

private int getId() {
    return Integer.parseInt(idTf.getText());
}

private void setId(String id) {
    idTf.setText(id);
}

private String getProf() {
    return profTf.getText();
}

private void setProf(String prof) {
    profTf.setText("" + prof);
}

@FXML
public void handleAddMember(){
    getClub().addMember(getId(), getProf());
}
具有TableView的控制器:

@FXML
TableColumn<Member, Integer> idColumn;
@FXML
TableColumn<Member, String> profColumn;
@FXML
TableView<Member> memberTv;

@FXML
private void initialize() {
    memberTv.setItems(getClub().getMembers());
    idColumn.setCellValueFactory(cellData -> new 
    ReadOnlyObjectWrapper(cellData.getValue().getId()));
    profColumn.setCellValueFactory(cellData -> new 
    ReadOnlyStringWrapper(cellData.getValue().getProf()));
}
public final Club getClub() {
    \\\returns Club model
}

添加成员时,我希望TableView显示已添加的成员,但它只显示已添加到模型中的成员。

我发现,我有一个ClubController,可在单击菜单按钮后设置阶段。问题是,每当我设置阶段时,我都使用俱乐部模型的一个新实例,而不是使用getKiosk()。我将所有新的Club()``改为getClub()```现在一切都很好。

“我使用两个模型”如果模型是独立的,这是一个问题。通常使用单个模型,以便更改可以更新所有视图。如果对您施加了此限制,处理此问题的唯一方法是观察接收add更改的模型并相应地更新另一个模型(假设这是唯一修改的模型-否则您需要同时观察这两个模型并在两个方向上进行更新)@fabian俱乐部模型为会员提供了一个
可观察列表
,俱乐部模型中还有一个方法,将
会员ID
职业
作为参数传递到会员模型中。俱乐部模型是主模型,两个控制器都连接到俱乐部模型。这还不够吗?传递数据的方法的存在并不意味着数据实际上是在模型之间传递的。此外,如果在代码中正确地建立了通信,也无法判断。有相当多的问题会出现,所以我不会感到惊讶,如果你在这方面有什么错误。没有更多的信息是不可能知道的。您没有发布有关模型的任何详细信息或任何可能在模型/控制器之间建立通信的代码。。。