尋找如何遍歷一個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