方案一:用递归遍历整个硬盘文件,并添加子节点
可行度:底 原因:因为要遍历整个硬盘,速度很慢
方案二:在节点展开时动态添加子节点
可行度:高 原因:弥补了方案一的缺陷
方案一的关键代码:
private static final String []_root = {"A:","B:","C:","D:","E:","F:","G:",
"H:","I:","J:","K:","L:","M:","N:",
"O:","P:","Q:","R:","S:","T:","U:",
"V:","W:","X:","Y:","Z:"};
DefaultMutableTreeNode top = new DefaultMutableTreeNode("My Computer..."); ;
for(int i=0;i<_root.length;i++){
File f = new File(_root[i]);
if(f.isDirectory()){
DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(_root[i]);
top.add(tempnode);
traversalNode(tempnode); //遍历添加子节点
}
}
jTree1 = new JTree(top);
public void traversalNode(DefaultMutableTreeNode dmtnf){
DefaultMutableTreeNode tempNode_p = dmtnf;
DefaultMutableTreeNode tempNode_c;
File ff = new File(f.toString());
for(int i=0;i
方案二关键代码:
方案二中增加了为排序和右键菜单(当将要展开时调用traversalNode)
public static final String TEMP_FILE_NAME = " ###!!!";//菜单展开前添加子节点使其可以被展开
public void traversalNode(DefaultMutableTreeNode parentNode){
DefaultMutableTreeNode tempNode_p = parentNode;
DefaultMutableTreeNode tempNode_c;
if(tempNode_p.getChildCount()==0){
return ;
}
if(tempNode_p.getFirstChild().toString().equals(Traversal.TEMP_FILE_NAME)){
tempNode_p.removeAllChildren();
File parentf = new File(tempNode_p.toString());
File[] filelist = parentf.listFiles();
File[] fileDirectory = new File[filelist.length];
File[] file = new File[filelist.length];
int num_Directory = 0;
int temp_d = 0;
int temp_f = 0;
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].isDirectory()) {
fileDirectory[temp_d] = filelist[i];
num_Directory++;
temp_d++;
} else {
file[temp_f] = filelist[i];
temp_f++;
}
}
fileDirectory = this.indexFiles(fileDirectory, num_Directory);
file = this.indexFiles(file, filelist.length - num_Directory);
for (int i = 0; i < num_Directory; i++) {
tempNode_c = new DefaultMutableTreeNode(fileDirectory[i].toString());
tempNode_p.add(tempNode_c);
tempNode_c.add(new DefaultMutableTreeNode(Traversal.TEMP_FILE_NAME));
}
for (int i = 0; i < filelist.length - num_Directory; i++) {
tempNode_c = new DefaultMutableTreeNode(file[i].toString());
tempNode_p.add(tempNode_c);
}
}
return ;
}
private File[] indexFiles(File []f_p,int num_p){
File []f = f_p;
int num = num_p;
for(int i=0;ii;j--){
File temp ;
if(f[i].toString().compareToIgnoreCase(f[j].toString())>0){
temp = f[j];
f[j] = f[i];
f[i] = temp;
}
}
}
return f;
}
获得根目录和为jTree添加时间监听器
DefaultMutableTreeNode top = new DefaultMutableTreeNode("My Computer...");
for(int i=0;i<_root.length;i++){
File f = new File(_root[i]);
if(f.isDirectory()){
DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(_root[i]);
tempnode.add(new DefaultMutableTreeNode(Traversal.TEMP_FILE_NAME));
top.add(tempnode);
}
}
jTree1 = new JTree(top);
jTree1.addMouseListener(new MyPanel_local_jTree1_MouseListener(this));
jTree1.addTreeWillExpandListener(new MyPanel_local_jTree1_WillExpandLIsterner(this));
this.jp1.updateUI();
jscro1.getViewport().add(jTree1);
当鼠标点击时
public void jTree1_MouseListener(MouseEvent event) {
if(event.getClickCount()==1){
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) jTree1.getSelectionPath().getLastPathComponent();
new Traversal("").traversalNode(treeNode);
}
}
当鼠标右击时
public void jTree1_RightMouseListener(MouseEvent event){
jTree1.add(jPopupMenu1);
TreePath path = jTree1.getPathForLocation(event.getX(), event.getY());
if(path == null)
return;
jTree1.setSelectionPath(path);
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) jTree1.getSelectionPath().getLastPathComponent();
if(treeNode.getChildCount()>0)
return;
jPopupMenu1.show(event.getComponent(),event.getX(),event.getY());
}
当将要展开时
public void jTree1_WillExpandListener(TreeExpansionEvent event){
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
new Traversal("").traversalNode(treeNode);
}
以上只是部分代码,如需完整代码,请致电[email protected]