JavaFX 8.0 TableView是否存在排序错误?

时间:2015-08-07 23:56:44

标签: combobox javafx clojure javafx-2 javafx-8

Java 8.0 x64,Win7 x64,Clojure,Emacs。

我正在使用TableView在Clojure中做一些事情,其中​​我是proxy TableCell所以我可以渲染和编辑其中的任意内容。值是原子内的地图的字段。代码如下。它利用了大量的实用函数和宏来使这更简单,但你得到了要点。主要是管理单元格的图形和文本属性。

有一个键盘处理程序附加到ComboBox,因此它知道用户何时按下ENTER等。此处理程序在离开单元格时被删除,因此我们不会结束在对象中有多个处理程序。

在这个例子中,我有三列,一个用于字段名称(一个只显示文本且不可编辑的简单单元工厂),一个用于值(花式单元工厂),另一个用于类型(简单)细胞工厂)。使用一些示例数据的输出如下所示:

enter image description here

当我根据Value对表进行排序时,事情似乎工作正常,如下所示:

通常,当键盘处理程序触发时,它会调用单元格的commitEdit函数,该函数调用其TableCell超类commitEdit。幕后的TableView魔术然后调用列的onEditCommit处理程序,它实际上将编辑提交到数据库。超类commitEdit返回后,单元格commitEdit中没有任何内容可做。然后updateItem自动调用单元格TableView,将ComboBox替换为单元格的正常内容。

问题

当我根据Field列对表格进行一次或多次排序,或Type两次或多次时,并尝试使用{{ 1}}(在这种情况下是颜色选择器),需要额外点击才能让ComboBox下拉,而ComboBox键不起作用,具体如下:

原因

在破碎的情况下,ENTER的超类似乎立即返回并且调用列的TableCell处理程序,单元格的onCommitEdit也没有得到调用,因此单元格不会渲染回正常的非编辑状态,即没有updateItem

正常和破损的案例如下所示: enter image description here

此处显示正常情况下的调试文本输出和损坏的情况。 enter image description here

奇怪的是这个问题有时会出现非颜色ComboBox(例如ComboBox字段有sides编辑器,带有数字。

这是JavaFX ComboBox中的一个错误吗?或者我做错了什么?

TableView

1 个答案:

答案 0 :(得分:2)

我发现了问题,当然,这是在我的代码中。

因为JFX重用单元格,所以即使在单元格中呈现不同的内容,单元格的editable属性仍然存在。在我的情况下,我有一个我的数据库的布尔成员,我作为一个复选框呈现。复选框本身是可点击的,但呈现它的单元格不可编辑。在使用不同的项目排序后重新呈现此单元格时,非编辑状态持续存在并且搞砸了新项目的编辑,这导致下拉框无法正常消失。实际上,错误也出现在非组合框中,例如文本编辑等。

因此,解决方案是为呈现的每个项类型显式设置单元格的可编辑属性。