2014-10-11 54 views
0

我有一个TableView与2列(TableColumn)。Javafx - 如何更改upTableColumn的行为

我将其中一列(TableColumn)委托给“on edit commit”(通过场景构建器)。

当我向其中一个单元格列写入新值并按下ENTER时,我正在进入委托函数。但是,如果我正在写一个值并在其他单元格上单击鼠标,该值不会被保存(并且委派的函数未被调用)(因为我没有按ENTER)。

有没有办法改变这种行为? 有没有办法通过场景构建器或代码来做到这一点?

谢谢

回答

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中设置。

+0

谢谢,但在你的例子中,你添加列表到textField。我的TableView(或TableColumn)不包含任何textField ... 所以我在这里想念什么? – user3668129 2014-10-11 19:23:34

+0

textField是新实现的表格单元类的成员。当单元格进入编辑状态时,它显示该文本字段以启用数据输入。我的例子只是引用的详细例子的简短摘录。这个例子缺少一些小的东西,比如在显示文本字段时调用requestFocus(),但是理解如何实现可编辑表格单元格是一个很好的起点。请查看链接指向的示例以了解详细信息。这对你有帮助吗? – user645859 2014-10-11 20:15:13

+0

soory,它没有帮助。我没有使用textBox为了将输入插入到表中。用户直接将输入插入到表格中。我读了你给我的链接,他们使用文本框来插入输入,并且该表用于输出。 – user3668129 2014-10-12 07:41:39