从其他控制器添加新数据时,如何使Tableview更新

时间:2019-06-02 10:35:15

标签: javafx tableview fxml

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

每个member都有一个id和一个profession,我用cellValueFactory列出了members。我尝试像这样将listeners添加到cellValueFactoryProperties

idColumn.cellValueFactoryProperty().addListener((obs, oldV, newV) -> memberTv.refresh());

但是它仍然没有显示新的members

具有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
}

添加members

的控制器
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显示添加的成员,但仅显示模型中已经添加的成员。

1 个答案:

答案 0 :(得分:0)

我发现,我有一个ClubController,它可以在单击菜单按钮后设置舞台。问题在于,每当我设置一个舞台时,我都会使用新的teh Club模型实例而不是使用getKiosk()。我将所有新的Club()``更改为getClub()`,现在一切正常。