寻找如何遍历JTree(可以这样做)并检查每个节点是否显示(对用户)或不可见.不能相信JTree没有这个功能,也许我错过了什么?
你必须考虑两件事:
通过关闭其父节点之一可以隐藏节点.即使父母在屏幕上可见,但孩子却不是.为此使用JTree.isVisible().
如果节点已展开,则它可能会被隐藏,因为它已滚出当前视口.这不是在JTree中处理的,而是在包装树的JScrollPane中处理的.确定节点是否位于视口的可见区域中.
要确定#2是否为true,必须获取节点使用JTree.getPathBounds()的矩形.然后,您必须将此矩形与视口相交(使用scrollPane.getViewport().getViewRect().如果nodeRect.intersects (viewRect)返回true,则节点可见.