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