如何用JTree做出像类似Windows资源管理器的界面?

Eraserpro 2003-03-18 04:12:20
如题,JTree这个类好像不大好用,想做一个图片浏览器,左边是路径树,右边显示图片,可路径树不知如何做,看了一些资料总觉不知从何下手,各位若有过类似的制作资料请给予指点,如有例子就更好了,先行谢过!
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eraserpro 2003-03-19
  • 打赏
  • 举报
回复
多谢两位,我先看一下,分不是问题
jiaojian77 2003-03-19
  • 打赏
  • 举报
回复
还有两段代码,上次忘了。
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);
}
}
jiaojian77 2003-03-18
  • 打赏
  • 举报
回复
我自己写的,不过有问题。我用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分呀?
zxhong 2003-03-18
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1408/1408571.xml?temp=.4313166

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧