Java 如何让TextFieldTableCell将焦点丢失处理为提交而不是取消?
JavaFX中TextFieldTableCell的默认行为是:Java 如何让TextFieldTableCell将焦点丢失处理为提交而不是取消?,java,javafx,javafx-8,Java,Javafx,Javafx 8,JavaFX中TextFieldTableCell的默认行为是: 点击回车键:提交编辑 按ESC键:取消编辑 焦点丢失:取消编辑 当焦点丢失时取消编辑是非常不自然的,会导致我的用户丢失数据 我已经尝试创建TextFieldTableCell的替代实现,在textfield.focusedProperty()上添加了一个侦听器以强制提交,但这根本不起作用 有人对如何改善这种行为有什么建议吗 My adaptedcreateTextField-函数: private static <T&g
- 点击回车键:提交编辑
- 按ESC键:取消编辑
- 焦点丢失:取消编辑
textfield.focusedProperty()
上添加了一个侦听器以强制提交,但这根本不起作用
有人对如何改善这种行为有什么建议吗
My adaptedcreateTextField
-函数:
private static <T> TextField createTextField(final Cell<T> cell, final StringConverter<T> converter) {
final TextField textField = new TextField(getItemText(cell, converter));
// Use onAction here rather than onKeyReleased (with check for Enter),
// as otherwise we encounter RT-34685
textField.setOnAction(event -> {
if (converter == null) {
throw new IllegalStateException(
"Attempting to convert text input into Object, but provided "
+ "StringConverter is null. Be sure to set a StringConverter "
+ "in your cell factory.");
}
cell.commitEdit(converter.fromString(textField.getText()));
event.consume();
});
textField.setOnKeyReleased(t -> {
if (t.getCode() == KeyCode.ESCAPE) {
cell.cancelEdit();
t.consume();
}
});
textField.focusedProperty().addListener(observable -> {
if (!textField.isFocused()) {
cell.commitEdit(converter.fromString(textField.getText()));
}
});
return textField;
}
private static TextField createTextField(最终单元格、最终StringConverter转换器){
final TextField TextField=新的TextField(getItemText(单元格,转换器));
//在此处使用onAction而不是onKeyReleased(选中Enter),
//否则我们会遇到RT-34685
textField.setOnAction(事件->{
if(converter==null){
抛出新的非法状态异常(
正在尝试将文本输入转换为对象,但已提供
+“StringConverter为空。请确保设置StringConverter”
+“在你的细胞工厂里。”);
}
committedit(converter.fromString(textField.getText());
event.consume();
});
textField.setOnKeyReleased(t->{
if(t.getCode()==KeyCode.ESCAPE){
cell.cancelEdit();
t、 消费();
}
});
textField.focusedProperty().addListener(可观察->{
如果(!textField.isFocused()){
committedit(converter.fromString(textField.getText());
}
});
返回文本字段;
}
我认为您需要关注单元格本身,并使其提交,以便将其呈现为文本字段的标签,但我猜您强制提交是没有用的,因为它不再处于编辑模式。。不过我对这部分不太精通。。