JavaFx:在TreeView中,当treeitem不在视图中时,只需滚动到索引编号
我需要做一件简单的事。我有一个大的树景。以及“下一个”和“上一个”菜单项。在“下一步”中,我必须选择下一个树项目。树列表如下所示JavaFx:在TreeView中,当treeitem不在视图中时,只需滚动到索引编号,java,javafx,javafx-8,Java,Javafx,Javafx 8,我需要做一件简单的事。我有一个大的树景。以及“下一个”和“上一个”菜单项。在“下一步”中,我必须选择下一个树项目。树列表如下所示 -Root(set visible hide is true for root) --Parent 1 ----Child 1 ----Child 2 ----Child 3 --Parent 2 ----Child 1 ----Child 2 现在按下下一个或上一个菜单项,我调用 myTreeView.getSelectionModel().clea
-Root(set visible hide is true for root)
--Parent 1
----Child 1
----Child 2
----Child 3
--Parent 2
----Child 1
----Child 2
现在按下下一个或上一个菜单项,我调用
myTreeView.getSelectionModel().clearAndSelect(newIndex);
这样我就可以选择下一个项目
myTreeView.getSelectionModel().scrollTo(newIndex)
我已设法滚动到选定的树项
问题:
让我手动选择第一项。之后我按下下一步按钮。现在,这会导致一种奇怪的行为,即它总是滚动新选定的树项是在视图中(可查看区域的边界)还是不在视图中。假设我有一个大的树项目列表。我的要求是,我只想滚动发生时,新选定的树项目离开了视线。有谁能建议如何做到这一点
谢谢。这件简单的事情并不那么简单。这是JavaFX中的一个已知问题;看 根据本期中的评论,我已经用我自己的TreeView实现了它。请注意,正如在问题评论中一样,我依赖JavaFX中的内部类来获得最终结果。不能保证这些内部类将继续存在 首先,创建从内部类派生的新蒙皮(同样:危险): 最后,在
滚动到之前,使用新方法作为条件:
if (!((FolderTreeViewSkin) myTreeView.getSkin()).isIndexVisible( intThePositionToShow ))
myTreeView.scrollTo( intThePositionToShow );
这就是我的工作;我希望它能帮助您或其他任何人。注意:这不能在jre9上运行
myTreeView.setSkin(new FolderTreeViewSkin(myTreeView));
if (!((FolderTreeViewSkin) myTreeView.getSkin()).isIndexVisible( intThePositionToShow ))
myTreeView.scrollTo( intThePositionToShow );