blob: 775e3a2c565f22d3f066fa8aa92eda448b2e60dc (
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
|
package cppcheckplus.shortcut;
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;
import cppcheckplus.control.Main;
import cppcheckplus.text.FileTools;
public class MyTree extends JPanel {
private JTree tree;
public File result;
public String src;
private Main 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, Main 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 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();
}
}
}
|