寻找如何遍历一个JTree(可以做到这一点),并检查以查看每个节点,看它是显示(对用户)还是不可见。不能相信JTree没有这个功能,也许我错过了一些东西?Java JTree - 如何检查节点是否显示?
3
A
回答
5
,必须考虑两个不同的东西:
节点可以通过关闭其父母中的一方变为隐藏。即使父母在屏幕上可见,孩子也没有。为此,请使用JTree.isVisible()。
如果该节点已扩展,则可能会隐藏,因为它已滚动出当前的viewport。这不是在JTree中处理,而是在包装树的JScrollPane中处理。了解节点是否位于视口的可见区域中。
要确定#2是否为真,必须获取节点正在使用的矩形JTree.getPathBounds()。然后,你必须交这个矩形与视(使用scrollPane.getViewport().getViewRect()
。如果nodeRect.intersects (viewRect)
回报true
,该节点是可见的。
2
根据您的应用程序,它可能是更有效地只认准可见节点,而不是通过迭代。在TreeModel
并确定是否每一个可见的所有节点如下所示的样本函数来执行此:
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class JTreeTools {
public static List<TreeNode> getVisibleNodes(JScrollPane hostingScrollPane, JTree hostingJTree){
//Find the first and last visible row within the scroll pane.
final Rectangle visibleRectangle = hostingScrollPane.getViewport().getViewRect();
final int firstRow = hostingJTree.getClosestRowForLocation(visibleRectangle.x, visibleRectangle.y);
final int lastRow = hostingJTree.getClosestRowForLocation(visibleRectangle.x, visibleRectangle.y + visibleRectangle.height);
//Iterate through each visible row, identify the object at this row, and add it to a result list.
List<TreeNode> resultList = new ArrayList<TreeNode>();
for (int currentRow = firstRow; currentRow<=lastRow; currentRow++){
TreePath currentPath = hostingJTree.getPathForRow(currentRow);
Object lastPathObject = currentPath.getLastPathComponent();
if (lastPathObject instanceof TreeNode){
resultList.add((TreeNode)lastPathObject);
}
}
return(resultList);
}
}
相关问题
- 1. Java如何检查树中的节点是否被选中?
- 2. Java Jtree:如何显示选中的节点
- 3. JTree的:如何检查当前节点是一个文件
- 4. Jtree在添加节点时未显示!
- 5. 如何通过点击JTree节点来显示内容
- 6. Java的DOM如何检查是否在XML中存在节点
- 7. 如何检查一个节点是否是另一个节点的子节点?
- 8. JTree的是显示应该是可扩展的叶子节点
- 9. JTree显示与子节点相同的节点
- 10. 如何检查是否显示
- 11. VirtualTreeView:检查节点是否可见
- 12. C#TreeView检查节点是否存在
- 13. 检查xml节点是否存在?
- 14. treeview检查节点是否被选中
- 15. 检查节点是否存在于Javascript
- 16. 检查文档是否为ROOT节点
- 17. 如何检查AlertDialog.builder是否显示并取消显示?
- 18. 如何检查DOM文本节点是否是链接
- 19. TreeView - View仅显示已检查节点,Edit显示所有可用节点
- 20. Java JTree仅扩展一级节点
- 21. Java JTree节点是一个可点击的URL链接
- 22. 如何检查XElement是否有任何子节点?
- 23. 如何检查树视图根节点是否存在子节点
- 24. 如何使用PHP检查XML中是否存在节点内的节点
- 25. RadTreeView的子节点检查节点是否已经存在
- 26. XSLT:检查节点列表中是否找到节点
- 27. 如何在JTree中移动节点?
- 28. 如何在jtree中重命名节点
- 29. 如何改变单一的JTree节点
- 30. 我如何得到Jtree Java中所有父节点的叶节点数
dammmnn我知道它与视做谢谢! – Hezeus 2010-05-12 21:11:44