我在JavaFX8中使用Clojure在Win7 x64上进行自定义TableCell。
我定义了一个自定义TableCell
,它可以根据单元格中的项目类型呈现不同的东西:当框架调用TableCell.updateItem()
时,它会查看单元格项目并相应地设置其图形和文本项。作为其中一部分,它会查看TableCell
返回的editingProperty
TableCell.isEditing()
值。
不知何故,这个editingProperty
在某些条件下会在幕后发生变化。
我可以覆盖TableCell.startEdit()
函数,并在用户单击单元格时更改单元格内容。在此方法中,调用TableCell.isEditing()
会返回True
,正如人们所期望的那样。
但是,如果我缩小窗口以使没有单元格内容可见(仅标题栏),然后在单元格编辑时再次打开它,那么updateItem()
方法按预期调用,但TableCell.isEditing()
现在返回False
,并且单元格再次呈现非编辑版本。
使用鼠标离焦或点击另一个单元格会触发TableCell.cancelEdit()
,当通过缩小窗口并再次打开窗口来更改editingProperty
时,不会触发此类事件。< / p>
我在changeListener
上放了一个editingProperty
,当我点击单元格时可以观察到属性更改为编辑状态,或者当我点击单元格或排序时,可以观察到非编辑状态该表,但当我缩小表并再次打开它时,没有changeListener事件,并且updateItem()
editingProperty
值为False。
我想也许当窗口缩小并再次打开时会创建一个新的TableCell,因此editingProperty
状态丢失了,但我检查了它并且它是相同的地址/指针/无论什么每一次。
那么问题是如何通过窗口缩小或排序事件等来维护isEditing
状态?至少在排序事件中,changeListener
会看到editingProperty
更改。但随着窗口缩小并重新打开,我没有得到这样的事件。听起来像个臭虫。
由于