大神帮忙看下错在哪里

寂寞灵魂 2012-09-28 09:00:45
怎么运行起来后单击磁盘没有节点呢?大神帮忙看下啊,在线等

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;

public class DiskTree extends JFrame {

private final class FileRenderer implements TreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
// 转换value为节点对象
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObject = node.getUserObject();
if (!(userObject instanceof File)) {
return new JLabel(userObject.toString());
}
File folder = (File) userObject;
FileSystemView view = FileSystemView.getFileSystemView();
Icon icon = view.getSystemIcon(folder);
JLabel label = new JLabel("" + folder, icon, JLabel.LEADING);
label.setBackground(Color.CYAN);
if (selected) {
label.setOpaque(true);
} else {
label.setOpaque(false);
}
return label;
}
}

private DefaultMutableTreeNode rootNode;
private JTree tree;
private JScrollPane scrollPane;

public DiskTree(){

addWindowListener(new WindowAdapter(){
public void windowActivated(WindowEvent e){
do_WindowActivated(e);
}
});

rootNode = new DefaultMutableTreeNode("我的电脑");
scrollPane = new JScrollPane();

tree = new JTree();
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
do_ValueChanged(e);
}
});


tree.setCellRenderer(new FileRenderer());
scrollPane.setViewportView(tree);

DefaultTreeModel model = new DefaultTreeModel(rootNode);
tree.setModel(model);

Container container = getContentPane();
container.add(scrollPane,BorderLayout.CENTER);

setTitle("以树结构显示文件");
setBounds(300,300,450,300);
setVisible(true);

}

public void do_WindowActivated(WindowEvent e){
File[] dir = File.listRoots();
for(File file:dir){
DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
rootNode.add(node);
}
tree.expandPath(new TreePath(rootNode));
}

public void do_ValueChanged(TreeSelectionEvent e){
TreePath path = e.getPath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
Object userObject = node.getUserObject();
if(!(userObject instanceof File))
return;
File folder = (File)userObject;
if(!folder.isDirectory())
return;
File[] files = folder.listFiles();
for(File file: files)
rootNode.add(new DefaultMutableTreeNode(file));
}

public static void main(String[]args){
DiskTree application = new DiskTree();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
十四月的清晨 2012-09-28
  • 打赏
  • 举报
回复
不太熟悉这部分,研究了一下,

rootNode.add(new DefaultMutableTreeNode(file)); 这不对

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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