在焦点更改时在TableView中提交值

时间:2015-08-05 07:18:43

标签: java tableview javafx-8

我曾经在表格视图的文本字段中进行编辑,以便在用户将焦点更改为单元格之外时进行提交(例如,通过单击另一个单元格,按钮等),这不起作用不再。除了安装Java更新(1.8.0_51)之外,我不知道是什么导致了这个......

与互联网上的所有类似示例一样,我使用的代码是一个简单的changeListener到文本域的focus属性:

textField.focusedProperty().addListener(
    (ObservableValue<? extends Boolean> ov, Boolean oldVal, Boolean newVal) -> {
        if (!newVal) {
            commitEdit(textField.getText());
        }
    });

虽然代码仍然正确执行,但提交不起作用。我做了一些挖掘,发现在更改侦听器被触发之前,单元格编辑模式已经被关闭(cancelEdit已被触发)。因此,commitEdit不再执行任何操作。

为了说明(改变)行为,您基本上可以使用任何示例代码,例如Hasan Kara在GitHub上的示例:https://gist.github.com/haisi/0a82e17daf586c9bab52(第217行添加了聚焦属性更改侦听器)

任何想法如何解决这个???

虽然How to enable commit on focusLost for TableView/TreeTableView?确实提供了可能的修复,但这些修复了黑客,非常可能在Java更新时无法正常工作。我需要一个准备用于生产的工作解决方案。 我无法想象如果没有恢复到黑客攻击就没有可行的解决方案(正如许多人已经指出的那样,当你改变对单元格的关注时,JavaFX没有提交是非常糟糕的行为。)此外,甚至Oracle自己的例子都使用了focusChange监听器,所以在最新的Java版本中显然存在一些问题

0 个答案:

没有答案