blob: 5286dde70ca2b24f3388dc23b400abd2d8861e00 (
plain) (
blame)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
package cppcheckplus.shortcut;
import cppcheckplus.control.UIFrame;
import cppcheckplus.text.FileTools;
import java.io.File;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
public class MyTree extends JPanel {
public File result;
public String src;
private final JTree tree;
private UIFrame jf;
private JTextArea textCode;
public MyTree() {
tree = new JTree();
tree.addTreeExpansionListener(new TreeExpansionAction());
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent evt) {
jTreeValueChanged(evt);
}
});
add(new JScrollPane(tree));
setRootDir(new File("c:/"));
setVisible(true);
}
public void setCode(JTextArea textCode, UIFrame jf) {
this.textCode = textCode;
this.jf = jf;
}
public void setRootDir(File dir) {
if (dir == null) {
return;
}
tree.setModel(new DefaultTreeModel(createNode(dir)));
MutableTreeNode rootNode = (MutableTreeNode) tree.getModel().getRoot();
rootNode.setUserObject(dir);
updateNode(rootNode);
tree.updateUI();
}
private void updateNode(Object object) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) object;
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode node2 =
(DefaultMutableTreeNode) node.getChildAt(i);
FileObject fileObject = (FileObject) node2.getUserObject();
if (!fileObject.isUpdated()) {
fileObject.setUpdated(true);
File file = fileObject.getFile();
if (file.isDirectory()) {
addSubFile(node2, file);
}
}
}
}
private void jTreeValueChanged(TreeSelectionEvent evt) {
DefaultMutableTreeNode selectedNode =
(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();//返回最后选定的节点
if (selectedNode != null && selectedNode.isLeaf()) {
result = ((FileObject) selectedNode.getUserObject()).file;
jf.src = result.getAbsolutePath();
if (!jf.centerTabPanel.isSelectTabComponents("代码")) {
jf.centerTabPanel.addTab("代码", jf.testCode);
jf.centerTabPanel.isSelectTabComponents("代码");
}
textCode.setText(FileTools.readFile(result));
}
}
public MutableTreeNode createNode(File dir) {
DefaultMutableTreeNode node =
new DefaultMutableTreeNode(new FileObject(dir));
if (dir.isDirectory()) {
addSubFile(node, dir);
}
return node;
}
private void addSubFile(DefaultMutableTreeNode node, File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
node.add(new DefaultMutableTreeNode(new FileObject(file)));
}
}
}
public class TreeExpansionAction implements TreeExpansionListener {
public void treeExpanded(TreeExpansionEvent event) {
updateNode(event.getPath().getLastPathComponent());
}
public void treeCollapsed(TreeExpansionEvent event) {
}
}
public class FileObject {
private final File file;
private boolean updated;
public FileObject(File file) {
this.file = file;
}
public File getFile() {
return file;
}
public boolean isUpdated() {
return updated;
}
public void setUpdated(boolean updated) {
this.updated = updated;
}
public String toString() {
return file.getName();
}
}
}
|