使用JTree,假設根節點爲級別0,並且根節點最多可達5級,如何輕鬆擴展所有級別1節點以便所有級別1 & 2分支和葉子是可見的,但3級和以下不是?Java JTree僅擴展一級節點
11
A
回答
20
感謝您的快速回復傢伙。不過,我現在已經找到了我正在尋找的簡單解決方案。出於某種原因,我無法在JavaDocs中看到DefaultMutableTreeNode.getLevel()! FYI我現在正在做的是:
DefaultMutableTreeNode currentNode = treeTop.getNextNode();
do {
if (currentNode.getLevel()==1)
myTree.expandPath(new TreePath(currentNode.getPath()));
currentNode = currentNode.getNextNode();
}
while (currentNode != null);
0
對所有2級節點使用expand(TreePath)。
3
你有一些樹的實用工具類在那裏它做的正是:
像this one:
public class SimpleNavigatorTreeUtil {
/**
* Expands/Collapse specified tree to a certain level.
*
* @param tree jtree to expand to a certain level
* @param level the level of expansion
*/
public static void expandOrCollapsToLevel(JTree tree, TreePath treePath,int level,boolean expand) {
try {
expandOrCollapsePath(tree,treePath,level,0,expand);
}catch(Exception e) {
e.printStackTrace();
//do nothing
}
}
public static void expandOrCollapsePath (JTree tree,TreePath treePath,int level,int currentLevel,boolean expand) {
// System.err.println("Exp level "+currentLevel+", exp="+expand);
if (expand && level<=currentLevel && level>0) return;
TreeNode treeNode = (TreeNode) treePath.getLastPathComponent();
TreeModel treeModel=tree.getModel();
if (treeModel.getChildCount(treeNode) >= 0) {
for (int i = 0; i < treeModel.getChildCount(treeNode); i++ ) {
TreeNode n = (TreeNode)treeModel.getChild(treeNode, i);
TreePath path = treePath.pathByAddingChild(n);
expandOrCollapsePath(tree,path,level,currentLevel+1,expand);
}
if (!expand && currentLevel<level) return;
}
if (expand) {
tree.expandPath(treePath);
// System.err.println("Path expanded at level "+currentLevel+"-"+treePath);
} else {
tree.collapsePath(treePath);
// System.err.println("Path collapsed at level "+currentLevel+"-"+treePath);
}
}
}
基本上,你需要去探索的子節點,直到您的條件(這裏的深度級別),並展開所有節點直到該點。
0
這應該工作 -
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;
public class Tree {
public static void main(String[] args) {
JPanel panel = new JPanel(new BorderLayout());
final JTree tree = new JTree();
panel.add(new JScrollPane(tree));
JButton btn = new JButton("Press Me");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
for (Enumeration e = ((TreeNode)tree.getModel().getRoot()).children();e.hasMoreElements();) {
TreeNode tn = (TreeNode)e.nextElement();
tree.expandPath(new TreePath(((DefaultTreeModel)tree.getModel()).getPathToRoot(tn)));
}
}
});
panel.add(btn, BorderLayout.SOUTH);
JFrame frame = new JFrame("");
frame.getContentPane().add(panel);
frame.setSize(300, 300);
frame.setLocation(100, 100);
frame.pack();
frame.show();
}
}
1
隨着你的級別1節點是根節點的所有兒童,並假設你正在使用DefaultMutableTreeNode
(需要調用getPath()
),你可以只遍歷根節點的孩子,像這樣:
Enumeration<?> topLevelNodes
= ((TreeNode)tree.getModel().getRoot()).children();
while(topLevelNodes.hasMoreElements()) {
DefaultMutableTreeNode node
= (DefaultMutableTreeNode)topLevelNodes.nextElement();
tree.expandPath(new TreePath(node.getPath()));
}
相關問題
- 1. JTree擴大節點擴展的寬度
- 2. 未選擇Jtree節點擴展
- 3. 擴展JTree的節點最小化GridBagLayout
- 4. 阻止節點在JTree節點擴展中的選擇
- 5. 的Java Swing JTree的擴展
- 6. 擴展JTree渲染
- 7. 水平擴展JTree
- 8. 如何搜索jtree中的特定節點並使該節點擴展。
- 9. JTree如何知道節點已擴展但未選中
- 10. 將「擴展」按鈕添加到沒有子項的JTree節點?
- 11. JPersistentTree(JTree,boundtree)將路徑擴展到給定節點
- 12. Java:如何以編程方式選擇並擴展JTree中的多個節點?
- 13. 遍歷多級JTree的所有節點
- 14. 僅在擴展節點時加載樹節點
- 15. 與節點擴展
- 16. java swt jface TreeViewer從節點擴展
- 17. 如何讓JTree擴展?
- 18. JTree有時不擴展
- 19. 讓用戶將節點添加到JTree,如果父節點已擴展,節點不會出現
- 20. Jtree節點添加
- 21. 的Java:遞歸添加節點JTree的
- 22. Java JTree節點是一個可點擊的URL鏈接
- 23. startEditingAtPath()將節點添加到一個JTree
- 24. 節點Orm2擴展到NO_SUCH_TABLE
- 25. TreeView擴展錯誤節點
- 26. ExpandableListView不擴展子節點
- 27. ArangoDB FOXX節點擴展
- 28. appendChild樹節點不擴展
- 29. 用於恢復狀態的jtree的存儲狀態/擴展節點
- 30. 有沒有更好的方法來測試JTree節點是否擴展?
這也是一個很好的解決方案:+1。如果你願意,你可以接受你自己的解決方案(並且把它放在答案的頂部),但是你知道你不會獲得任何重複點。 – VonC 2009-02-04 09:52:15