我有一个包含2列的TableView(TableColumn)。
我将其中一列(TableColumn)委托给“on edit commit”(通过场景构建器)。
当我将一个新值写入其中一个单元格列并按下ENTER时,我将进入委派函数。
但是,如果我正在写一个值并在其他单元格上单击鼠标,则不保存该值(并且未调用委托函数)(因为我没有按ENTER键)。
有没有办法改变这种行为? 有没有办法通过场景构建器或代码来实现?
谢谢
答案 0 :(得分:0)
默认的TextField行为要求用户按Enter键提交编辑。这可以通过扩展TableCell类来提交焦点更改的编辑来改变,就像在this TableView教程中一样。准确地说,看一下EditingCell类的实现及其在这个例子中的用法。
基本上,所需要的只是表格单元格的文本字段设置焦点更改侦听器,它将调用commitEdit(),如下例所示:
textField.focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) {
if (!arg2) {
commitEdit(value);
}
}
});
上面提到的示例显示了如何在Java代码中为表列设置新的表格单元格类型,但也可以在FXML中进行设置。