wangting
2024-09-27 a3e87f78ee262ca9bb7d9b0c997639d5f3295890
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.vci.client.ui.tree;
 
import java.util.Enumeration;
 
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
 
/**
 * VCIBaseTree as the base tree in all vci java project.
 * 
 */
public class VCIBaseTree extends JTree{
 
    /**
     * 
     */
    private static final long serialVersionUID = -3374434957495661429L;
 
    public VCIBaseTree(DefaultTreeModel treeModel) {
        this(treeModel, null);
    }
 
    public VCIBaseTree(DefaultTreeModel treeModel, DefaultTreeCellRenderer treeCellRenderer) {
        super(treeModel);
        this.putClientProperty("JTree.lineStyle", "Angled");
        this.setCellRenderer(treeCellRenderer);
        this.setEditable(false);
        
        treeModel.addTreeModelListener(new TreeModelListener() {
            public void treeNodesInserted(TreeModelEvent e) {
                try {
                  scrollPathToVisible(new TreePath(e.getPath()));
                } catch (Exception ae) {
                    ae.printStackTrace();
                }
            }
 
            public void treeNodesRemoved(TreeModelEvent e) {
                try {
                   scrollPathToVisible(new TreePath(e.getPath()));
                } catch (Exception ae) {
                    ae.printStackTrace();
                }
            }
 
            public void treeNodesChanged(TreeModelEvent e) {
                try {
                   scrollPathToVisible(new TreePath(e.getPath()));
                } catch (Exception ae) {
                    ae.printStackTrace();
                }
            }
 
            public void treeStructureChanged(TreeModelEvent e) {
                try {
                   scrollPathToVisible(new TreePath(e.getPath()));
                } catch (Exception ae) {
                    ae.printStackTrace();
                }
            }
        });
    }
    
    public void expandAllTreeNode(TreePath parent, boolean expand) {
        TreeNode node = (TreeNode) parent.getLastPathComponent();
        if (node.getChildCount() >= 0) {
            for (Enumeration e = node.children(); e.hasMoreElements();) {
                TreeNode n = (TreeNode) e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                expandAllTreeNode(path, expand);
            }
        }
        
        if (expand) {
            this.expandPath(parent);
        } else {
            this.collapsePath(parent);
        }
    }
}