如何用JTree做出像类似Windows资源管理器的界面? http://expert.csdn.net/Expert/topic/1408/1408571.xml?temp=.4313166 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我自己写的,不过有问题。我用1.4编译的。你可以看看,参考一下。先写个类:class FileNode extends DefaultMutableTreeNode { private boolean explored = false; public FileNode(File file) { setUserObject(file); } public boolean getAllowsChildren() { return isDirectory(); } public boolean isLeaf() { return !isDirectory(); } public File getFile() { return (File)getUserObject(); } public boolean isExplored() { return explored; } public boolean isDirectory() { File file = getFile(); return file.isDirectory(); } public String toString() { File file = (File)getUserObject(); String filename = file.toString(); int index = filename.lastIndexOf(File.separator); return (index != -1 && index != filename.length()-1) ? filename.substring(index+1) : filename; } public void explore() { if(!isDirectory()) return; if(!isExplored()) { File file = getFile(); File[] children = file.listFiles(); for(int i=0; i < children.length; ++i) add(new FileNode(children[i])); explored = true; } }}然后用下面的方法生成tree:private TreeModel createTreeModel() { disks = FileSystemView.getFileSystemView().getRoots(); if(Array.getLength(disks)>1){ DefaultMutableTreeNode root; root = new DefaultMutableTreeNode("My computer"); for(int i=0; i<Array.getLength(disks); i++){ FileNode diskNode = new FileNode(disks[i]); //diskNode.explore(); root.add(diskNode); } return new DefaultTreeModel(root); }else{ FileNode root; root = new FileNode(disks[0]); return new DefaultTreeModel(root); } //return new DefaultTreeModel(root); }主程序中再加上一句:final JTree tree = new JTree(createTreeModel());能不能给200分呀? 还有两段代码,上次忘了。tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) return; File nodeInfo = (File)node.getUserObject(); if (node.isLeaf()) { wholeName = nodeInfo.toString(); gotImage = new ImageIcon(wholeName,wholeName); picture.setIcon(gotImage); picture.setPreferredSize(new Dimension(gotImage.getIconWidth(), gotImage.getIconHeight() )); picture.revalidate(); //System.out.println(nodeInfo); }else{ dirName = nodeInfo.toString(); System.out.println(dirName); File[] fileList = FileSystemView.getFileSystemView().getFiles(nodeInfo,true); String temp; String fileName[] = new String[Array.getLength(fileList)]; for(int i=0; i<Array.getLength(fileList); i++){ temp=fileList[i].toString(); //System.out.println(temp); if(dirName.charAt(dirName.length()-1)!='\\'){ fileName[i]=temp.substring(dirName.length()+1); }else{ fileName[i]=temp.substring(dirName.length()); } //System.out.println(fileName[i]); } list.setListData(fileName); //System.out.println(nodeInfo); } } }); tree.addTreeExpansionListener(new TreeExpansionListener(){ public void treeCollapsed(TreeExpansionEvent e) {} public void treeExpanded(TreeExpansionEvent e) { UpdateStatus updateThread; TreePath path = e.getPath(); FileNode node = (FileNode) path.getLastPathComponent(); if( ! node.isExplored()) { DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); status.setText("exploring ..."); UpdateStatus us = new UpdateStatus(); us.start(); node.explore(); model.nodeStructureChanged(node); } } 关于java的排序的问题 java.lang.NoClassDefFoundError: Could not initialize class SQLite.JDBC2x.Databas 在RCP使用jasperreport的问题 截取字符串中非0部分 急急急:Java打印,设置打印纸大小 通过jdbc连接SQLServer2000报错 如何提取着如此格式的字符串的问题! 公历和阴历如何转换??????????? 关于Web服务器证书的问题?????急急急急急急 突然很纠结几个关于java的问题。 想找个程序员职位做一做…… 新手请教程序,在线等待---100分
你可以看看,参考一下。
先写个类:
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false; public FileNode(File file) {
setUserObject(file);
}
public boolean getAllowsChildren() { return isDirectory(); }
public boolean isLeaf() { return !isDirectory(); }
public File getFile() { return (File)getUserObject(); } public boolean isExplored() { return explored; } public boolean isDirectory() {
File file = getFile();
return file.isDirectory();
}
public String toString() {
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator); return (index != -1 && index != filename.length()-1) ?
filename.substring(index+1) :
filename;
}
public void explore() {
if(!isDirectory())
return; if(!isExplored()) {
File file = getFile();
File[] children = file.listFiles(); for(int i=0; i < children.length; ++i)
add(new FileNode(children[i])); explored = true;
}
}
}然后用下面的方法生成tree:private TreeModel createTreeModel() {
disks = FileSystemView.getFileSystemView().getRoots();
if(Array.getLength(disks)>1){
DefaultMutableTreeNode root;
root = new DefaultMutableTreeNode("My computer");
for(int i=0; i<Array.getLength(disks); i++){
FileNode diskNode = new FileNode(disks[i]);
//diskNode.explore();
root.add(diskNode);
}
return new DefaultTreeModel(root);
}else{
FileNode root;
root = new FileNode(disks[0]);
return new DefaultTreeModel(root);
} //return new DefaultTreeModel(root);
}主程序中再加上一句:final JTree tree = new JTree(createTreeModel());能不能给200分呀?
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();
if (node == null) return;
File nodeInfo = (File)node.getUserObject();
if (node.isLeaf()) {
wholeName = nodeInfo.toString();
gotImage = new ImageIcon(wholeName,wholeName);
picture.setIcon(gotImage);
picture.setPreferredSize(new Dimension(gotImage.getIconWidth(),
gotImage.getIconHeight() ));
picture.revalidate();
//System.out.println(nodeInfo);
}else{
dirName = nodeInfo.toString();
System.out.println(dirName);
File[] fileList = FileSystemView.getFileSystemView().getFiles(nodeInfo,true);
String temp;
String fileName[] = new String[Array.getLength(fileList)];
for(int i=0; i<Array.getLength(fileList); i++){
temp=fileList[i].toString();
//System.out.println(temp);
if(dirName.charAt(dirName.length()-1)!='\\'){
fileName[i]=temp.substring(dirName.length()+1);
}else{
fileName[i]=temp.substring(dirName.length());
}
//System.out.println(fileName[i]);
}
list.setListData(fileName);
//System.out.println(nodeInfo);
}
}
}); tree.addTreeExpansionListener(new TreeExpansionListener(){
public void treeCollapsed(TreeExpansionEvent e) {}
public void treeExpanded(TreeExpansionEvent e) {
UpdateStatus updateThread;
TreePath path = e.getPath();
FileNode node = (FileNode)
path.getLastPathComponent(); if( ! node.isExplored()) {
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
status.setText("exploring ..."); UpdateStatus us = new UpdateStatus();
us.start(); node.explore();
model.nodeStructureChanged(node);
}
}