2014-05-07 111 views
0

我想实现一个需求,我必须折叠所有子节点JTree如何折叠JTree节点?

我正在使用jdk1.6。

注意:只有按钮单击时才会折叠根元素的子节点。

这里是我的代码:

private static void collapseAll(JTree tree, TreePath parent) { 
     TreeNode node = (TreeNode)parent.getLastPathComponent(); 
     if (!node.isLeaf() && node.getChildCount()>=0) { 
      Enumeration e = node.children(); 
      while (e.hasMoreElements()) { 
      TreeNode n = (TreeNode)e.nextElement(); 
      TreePath path = parent.pathByAddingChild(n); 
      collapseAll(tree, path); 
      } 
     } 
     tree.collapsePath(parent); 
} 
+0

私有静态无效collapseAll(JTree的树,TreePath的父){ \t TreeNode node =(TreeNode)parent.getLastPathComponent();如果(!node.isLeaf()&& node.getChildCount()> = 0){ \t Enumeration e = node.children(); (e.hasMoreElements()){ \t TreeNode n =(TreeNode)e.nextElement(); \t TreePath path = parent.pathByAddingChild(n); \t collapseAll(tree,path); \t} \t} \t tree.collapsePath(parent); \t} – user3559681

+0

其中我发送根节点路径作为参数,此逻辑崩溃所有节点。我只想要根节点的子节点崩溃 – user3559681

回答

3

如果我理解你的要求,你也许可以使用下面的代码:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class TreeCollapseTest { 
    private final JTree tree = new JTree(); 
    public JComponent makeUI() { 
    JPanel p = new JPanel(new BorderLayout()); 
    p.add(new JButton(new AbstractAction("collapse") { 
     @Override public void actionPerformed(ActionEvent e) { 
     // if (tree.isRootVisible()) { 
     int row = tree.getRowCount() - 1; 
     //while (row >= 0) { //collapses all nodes 
     while (row > 0) { //collapses only child nodes of root node 
      tree.collapseRow(row); 
      row--; 
     } 
     } 
    }), BorderLayout.SOUTH); 
    p.add(new JScrollPane(tree)); 
    return p; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 
    public static void createAndShowGUI() { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.getContentPane().add(new TreeCollapseTest().makeUI()); 
    f.setSize(320, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 
+0

,这对我很有用。很感谢 – user3559681