Java 8.0 x64,Win7 x64,Clojure,Emacs。
我正在使用TableView
在Clojure中做一些事情,其中我是proxy
TableCell
所以我可以渲染和编辑其中的任意内容。值是原子内的地图的字段。代码如下。它利用了大量的实用函数和宏来使这更简单,但你得到了要点。主要是管理单元格的图形和文本属性。
有一个键盘处理程序附加到ComboBox
,因此它知道用户何时按下ENTER
等。此处理程序在离开单元格时被删除,因此我们不会结束在对象中有多个处理程序。
在这个例子中,我有三列,一个用于字段名称(一个只显示文本且不可编辑的简单单元工厂),一个用于值(花式单元工厂),另一个用于类型(简单)细胞工厂)。使用一些示例数据的输出如下所示:
当我根据Value对表进行排序时,事情似乎工作正常,如下所示:
通常,当键盘处理程序触发时,它会调用单元格的commitEdit
函数,该函数调用其TableCell
超类commitEdit
。幕后的TableView
魔术然后调用列的onEditCommit
处理程序,它实际上将编辑提交到数据库。超类commitEdit
返回后,单元格commitEdit
中没有任何内容可做。然后updateItem
自动调用单元格TableView
,将ComboBox
替换为单元格的正常内容。
问题
当我根据Field
列对表格进行一次或多次排序,或Type
列两次或多次时,并尝试使用{{ 1}}(在这种情况下是颜色选择器),需要额外点击才能让ComboBox
下拉,而ComboBox
键不起作用,具体如下:
原因
在破碎的情况下,ENTER
的超类似乎立即返回并且不调用列的TableCell
处理程序,单元格的onCommitEdit
也没有得到调用,因此单元格不会渲染回正常的非编辑状态,即没有updateItem
。
奇怪的是这个问题有时会出现非颜色ComboBox
(例如ComboBox
字段有sides
编辑器,带有数字。
这是JavaFX ComboBox
中的一个错误吗?或者我做错了什么?
TableView
答案 0 :(得分:2)
我发现了问题,当然,这是在我的代码中。
因为JFX重用单元格,所以即使在单元格中呈现不同的内容,单元格的editable
属性仍然存在。在我的情况下,我有一个我的数据库的布尔成员,我作为一个复选框呈现。复选框本身是可点击的,但呈现它的单元格不可编辑。在使用不同的项目排序后重新呈现此单元格时,非编辑状态持续存在并且搞砸了新项目的编辑,这导致下拉框无法正常消失。实际上,错误也出现在非组合框中,例如文本编辑等。
因此,解决方案是为呈现的每个项类型显式设置单元格的可编辑属性。