场景:
我有一个名为 EditClientDeatils.fxm
l 的父窗口,并在其上有一个 TableView
。我正在通过创建另一个名为 UserDetails.fxml
的窗口并将行数据填充到此 FXML 字段来编辑这些行结果,现在从第二个窗口进行编辑后,如果保存,我需要使用以下命令更新父表最新数据。我尝试了如下所示的操作,但根本不刷新表格。但是当我调试时,我的表列表已更新为最新数据,并且没有在窗口中显示。
那么如何从不同的 Controller 更新我的表格 View ?
在子窗口中,我像这样加载父窗口。
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("EditClientDetails.fxml"));
EditClientDetailsController fooController = (EditClientDetailsController) fxmlLoader.getController();
try {
fxmlLoader.load();
} catch (IOException ex) {
Logger.getLogger(NewUserController.class.getName()).log(Level.SEVERE, null, ex);
}
在我的父类初始化方法中具有以下代码:
@覆盖 公共(public)无效初始化(URL url,ResourceBundle rb){
fNameCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientFirstName"));
lNameCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientLastName"));
addressCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientAddress"));
mobileCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientMobileNumber"));
emailCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientEmailID"));
catagoryCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("clientTypeCode"));
genderCol.setCellValueFactory(
new PropertyValueFactory<AtUser, String>("gender"));
editSaveAction.setSortable(false);
editSaveAction.setCellValueFactory(
new Callback<TableColumn.CellDataFeatures<AtUser, Boolean>,
ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<AtUser, Boolean> p) {
return new SimpleBooleanProperty(p.getValue() != null);
}
});
editSaveAction.setCellFactory(
new Callback<TableColumn<AtUser, Boolean>, TableCell<AtUser, Boolean>>() {
@Override
public TableCell<AtUser, Boolean> call(TableColumn<AtUser, Boolean> p) {
return new ClientButtonCell(customerTable);
}
});
// Add filtered data to the table
customerTable.setItems(filteredData);
// Listen for text changes in the filter text field
filterField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
updateFilteredData();
}
});
}
当我调试时
customerTable.setItems(filteredData);
此 filteredData
包含我所需的数据,但不在 Window 上。
如果我遗漏了什么,请指出。
最佳答案
我遇到了同样的问题,并发现这个工作围绕它,强制它刷新。
table.getColumns().get(0).setVisible(false);
table.getColumns().get(0).setVisible(true);
修改表格项目列表后。
关于javafx-2 - 父 TableView 从子 fxml 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042074/