java - 如果字段输入为空,则 TableColumn 停止 EditCommit
问题描述
我有这个TableColumn<Foo, String> colValue = new TableColumn<>("Value");
使用此设置:
colValue.setCellValueFactory(new PropertyValueFactory<>("value"));
colValue.setCellFactory(TextFieldTableCell.forTableColumn());
colValue.setOnEditCommit(event -> {
//get new value
String newValue = event.getNewValue().trim();
//if is empty not update
if(newValue.isEmpty()){ return; }
//set new value
event.getRowValue().setValue(newValue);
//refresh table
tableView.refresh();
});
我想要的是直接从表中更新对象字段。双击单元格时,更改值并提交。
但是当字段输入为空白时,我不想更新值。
上面的代码工作正常。仅当值不为空时才更新对象。
但问题是,如果字段输入为黑色,并且已提交,则对象不会更新,但单元格是空白的。
即使对于单元格,如何防止提交?如果提交时字段输入为空白,我想在单元格中查看旧值(对象的实际值)。
解决方案
似乎在触发事件时,拦截更新单元格的文本为时已晚。
这有点小技巧(可能更好的方法是TableCell
直接子类化并实现行为以在用户按 Enter 等时直接调用cancelEdit
,使用空字符串)。commitEdit(...)
但是,您可以按如下方式覆盖该方法:
colValue.setCellValueFactory(new PropertyValueFactory<>("value"));
//colValue.setCellFactory(TextFieldTableCell.forTableColumn());
//colValue.setOnEditCommit(event -> {
//
// //get new value
// String newValue = event.getNewValue().trim();
//
// //if is empty not update
// if(newValue.isEmpty()){ return; }
//
// //set new value
// event.getRowValue().setValue(newValue);
//
// //refresh table
// tableView.refresh();
//
//});
colValue.setCellFactory(tc -> new TextFieldTableCell<>(TextFormatter.IDENTITY_STRING_CONVERTER) {
@Override
public void commitEdit(String newValue) {
if (newValue.isEmpty()) {
cancelEdit();
} else {
super.commitEdit(newValue);
}
}
});
推荐阅读
- azure - Azure VPN 网关 BGP APIPA 地址
- powershell - 如何使用 -ArgumentList 和 Invoke-Command 将标志传递给脚本?
- json - 使用 jq 获取 json 的每个唯一键的值列表
- signalr-hub - 如何为 Azure SignalR 管理库配置底层 JSON 序列化选项?
- docker - docker for mac 中的 SSL?
- ionic-framework - 电容器社区/http 处理错误
- amazon-cloudformation - 如何使用云形成在 Glue 爬虫中指定 Glue 表和模式
- git - Jenkins Pipeline 无法使用 SubmoduleOption 结帐以递归获取我的子模块
- python - 如何使用 plotly 或任何其他库在 python 中绘制 Y 对 2 X
- c# - 应用程序不加载 azure app 配置功能标志值,但加载配置值