簡體   English   中英

如何折疊 JTree 節點?

[英]How to collapse JTree nodes?

我想實現一個要求,我必須折疊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); 
}

如果我了解您的要求,您可以使用以下代碼:

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);
  }
}

嘗試這個:

for(int i = jTree.getRowCount() - 1; i >= 0; i--){
     jTree.collapseRow(i);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM