我正在使用 JavaFX 中的 TableView。我想做的是跟踪对表格所做的编辑。当用户离开表格时,我想检查是否有任何编辑,如果有,提示用户询问他们是否要保存更改。
我有 TableView 工作,我可以跟踪编辑,我可以确定 TableView 何时失去焦点(使用focusedProperty 更改侦听器)。
但是,问题是当单击单元格进行编辑时,会触发表格的focusedProperty 更改侦听器(编辑单元格获得焦点,表格本身失去焦点)。我真正想要的是一种方法来判断,当焦点发生变化时,它是更改为表格的子节点(例如列或单元格)还是表格外部的内容(在父 GUI 上选择不同的选项卡)。但我不想将侦听器添加到可以单击的每个其他可能节点。
如果我知道如何获取当前关注的项目(还没有看到如何做到这一点),我可以递归调用 getParent() 并检查 TableView 是否在该列表中,如果是,我会知道它是一个孩子. 但是我还没有看到一种通用的方法来获取应用程序中当前关注的节点。
没有很好的通用方法来遍历表的孩子,因为 getChildrenUnmodifiable() 返回我 Node() 类型(我想我可以强制转换每个类型以确定它们是否都有更多的孩子),或者我必须去 TableColumns 然后那里的单元格(并检查每个单元格的图形)。
我可能会递归地遍历子项,根据需要进行强制转换,并在此时检查 isFocused() ,除非有更好的解决方案。但我希望这里的某个人可能对这个问题有更好的解决方案,最好是更通用的解决方案。