有以下问题:
1、tree没有生成一个实例
//NullPointerExecption Error Message
tree.addMouseListener(m1);
至少需要:tree=new JTree()
但这样也不对
修改了一下:
////////////////////////////////////
tree=new JTree(treeModel);
tree.addMouseListener(m1);
tree.setFont(new Font("Dialog",Font.BOLD,12)); //从init中移过来
c.add(tree,BorderLayout.CENTER);
/////////////////////////////////////
即现在init中生成treeModel
然后生成tree
最后加入到frame中2、在init中生成treeModel的问题
同样treeModel没有生成实例
在private void buildTree(File f,DefaultMutableTreeNode parent,int where)
方法中加入一下判断treeModel是否为空对象:
DefaultMutableTreeNode n=new DefaultMutableTreeNode(f.toString());
if(treeModel==null)
treeModel=new DefaultTreeModel(n);
else
treeModel.insertNodeInto(n,parent,where);
3、多个驱动器问题
原代码为:
File[] list=File.listRoots();
但有问题,而且读所有文件时间实在是..............
所以暂时改成仅读f盘(俺机器此盘文件最少了,所以时间不算长)
File[] list= new File[1];//File.listRoots();
list[0]=new File("f:\\");
经过以上修改,可以生成f盘的树了至于遍历所有驱动器么,等高人把import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.tree.*;
import java.io.*;
//*Programe Body
class DirectTree extends JFrame implements ActionListener
{//* Definition variable
private JCheckBox box;
private JTree tree;
private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JPanel controls;
private String file;
private static final String closeString="close";
private static final String showString="Show Details";//*programe`s body:
public DirectTree()
{
super("DirectTree Assistance");
Container c=super.getContentPane();
root=new DefaultMutableTreeNode("Disks");
//for example what`s means:
MouseListener m1=new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(box.isSelected())
showDetails(tree.getPathForLocation(e.getX(),e.getY()));
}
}; //NullPointerExecption Error Message
buildTree();
controls=new JPanel();
box=new JCheckBox(showString);
init();
c.add(controls,BorderLayout.NORTH); ////////////////////////////////////
tree=new JTree(treeModel);
tree.addMouseListener(m1);
tree.setFont(new Font("Dialog",Font.BOLD,12)); //´ÓinitÖÐÒƹýÀ´
c.add(tree,BorderLayout.CENTER);
/////////////////////////////////////
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals(closeString))
//System.exit(0);
this.dispose();
}
private void init()
{
controls.add(box);
addButton(closeString);
controls.setBackground(Color.LIGHT_GRAY);
controls.setLayout(new FlowLayout());
setSize(400,400);
}
private void addButton(String n)
{
Button bt=new Button(n);
bt.setFont(new Font("Dialog",Font.BOLD,12));
bt.addActionListener(this);
controls.add(bt);
}
private void buildTree()
{
File[] list= new File[1];//File.listRoots();
list[0]=new File("f:\\");
//System.out.println(list.length);
for(int i=0;i<list.length;i++)
if(list[i].exists())
buildTree(list[i],root,i);
}
private void buildTree(File f,DefaultMutableTreeNode parent,int where)
{
DefaultMutableTreeNode n=new DefaultMutableTreeNode(f.toString());
//////////////////////////
if(treeModel==null)
treeModel=new DefaultTreeModel(n);
else
treeModel.insertNodeInto(n,parent,where);
/////////////////////////
//System.out.println(f.toString());
if(f.isDirectory())
{
String[] list=f.list();
for(int i=0;i<list.length;i++)
buildTree(new File(f,list[i]),n,i);
}
}
private void showDetails(TreePath p)
{
if(p==null)
return;
File f=new File(p.getLastPathComponent().toString());
JOptionPane.showMessageDialog(this,f.getPath()+"\n "+getAttributes(f));
}
private String getAttributes(File f)
{
String t="";
if(f.isDirectory())
t+="Directory";
else
t+="Nondirectory file";
t+="\n ";
if(!f.canRead())
t+="not ";
t+="Readable\n";
if(!f.canWrite())
t+="not ";
t+="Writeable\n";
if(!f.isDirectory())
t+="Size in bytes:"+f.length()+"\n ";
else
{ t+=" Contains files: \n ";
String[] contents=f.list();
for(int i=0;i<contents.length;i++)
t+=contents[i]+",";
t+="\n";
}
return t;
}
}
1、tree没有生成一个实例
//NullPointerExecption Error Message
tree.addMouseListener(m1);
至少需要:tree=new JTree()
但这样也不对
修改了一下:
////////////////////////////////////
tree=new JTree(treeModel);
tree.addMouseListener(m1);
tree.setFont(new Font("Dialog",Font.BOLD,12)); //从init中移过来
c.add(tree,BorderLayout.CENTER);
/////////////////////////////////////
即现在init中生成treeModel
然后生成tree
最后加入到frame中2、在init中生成treeModel的问题
同样treeModel没有生成实例
在private void buildTree(File f,DefaultMutableTreeNode parent,int where)
方法中加入一下判断treeModel是否为空对象:
DefaultMutableTreeNode n=new DefaultMutableTreeNode(f.toString());
if(treeModel==null)
treeModel=new DefaultTreeModel(n);
else
treeModel.insertNodeInto(n,parent,where);
3、多个驱动器问题
原代码为:
File[] list=File.listRoots();
但有问题,而且读所有文件时间实在是..............
所以暂时改成仅读f盘(俺机器此盘文件最少了,所以时间不算长)
File[] list= new File[1];//File.listRoots();
list[0]=new File("f:\\");
经过以上修改,可以生成f盘的树了至于遍历所有驱动器么,等高人把import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.tree.*;
import java.io.*;
//*Programe Body
class DirectTree extends JFrame implements ActionListener
{//* Definition variable
private JCheckBox box;
private JTree tree;
private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JPanel controls;
private String file;
private static final String closeString="close";
private static final String showString="Show Details";//*programe`s body:
public DirectTree()
{
super("DirectTree Assistance");
Container c=super.getContentPane();
root=new DefaultMutableTreeNode("Disks");
//for example what`s means:
MouseListener m1=new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(box.isSelected())
showDetails(tree.getPathForLocation(e.getX(),e.getY()));
}
}; //NullPointerExecption Error Message
buildTree();
controls=new JPanel();
box=new JCheckBox(showString);
init();
c.add(controls,BorderLayout.NORTH); ////////////////////////////////////
tree=new JTree(treeModel);
tree.addMouseListener(m1);
tree.setFont(new Font("Dialog",Font.BOLD,12)); //´ÓinitÖÐÒƹýÀ´
c.add(tree,BorderLayout.CENTER);
/////////////////////////////////////
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals(closeString))
//System.exit(0);
this.dispose();
}
private void init()
{
controls.add(box);
addButton(closeString);
controls.setBackground(Color.LIGHT_GRAY);
controls.setLayout(new FlowLayout());
setSize(400,400);
}
private void addButton(String n)
{
Button bt=new Button(n);
bt.setFont(new Font("Dialog",Font.BOLD,12));
bt.addActionListener(this);
controls.add(bt);
}
private void buildTree()
{
File[] list= new File[1];//File.listRoots();
list[0]=new File("f:\\");
//System.out.println(list.length);
for(int i=0;i<list.length;i++)
if(list[i].exists())
buildTree(list[i],root,i);
}
private void buildTree(File f,DefaultMutableTreeNode parent,int where)
{
DefaultMutableTreeNode n=new DefaultMutableTreeNode(f.toString());
//////////////////////////
if(treeModel==null)
treeModel=new DefaultTreeModel(n);
else
treeModel.insertNodeInto(n,parent,where);
/////////////////////////
//System.out.println(f.toString());
if(f.isDirectory())
{
String[] list=f.list();
for(int i=0;i<list.length;i++)
buildTree(new File(f,list[i]),n,i);
}
}
private void showDetails(TreePath p)
{
if(p==null)
return;
File f=new File(p.getLastPathComponent().toString());
JOptionPane.showMessageDialog(this,f.getPath()+"\n "+getAttributes(f));
}
private String getAttributes(File f)
{
String t="";
if(f.isDirectory())
t+="Directory";
else
t+="Nondirectory file";
t+="\n ";
if(!f.canRead())
t+="not ";
t+="Readable\n";
if(!f.canWrite())
t+="not ";
t+="Writeable\n";
if(!f.isDirectory())
t+="Size in bytes:"+f.length()+"\n ";
else
{ t+=" Contains files: \n ";
String[] contents=f.list();
for(int i=0;i<contents.length;i++)
t+=contents[i]+",";
t+="\n";
}
return t;
}
}
private void buildTree()
{
File[] list=File.listRoots();
for(int i=0;i<list.length;i++)
if(list[i].exists()){
//将buildTree(list[i],root,i); 改为,即根磁盘应该加在0位置
buildTree(list[i],root,0);
}
}2、加一句
private void buildTree(File f,DefaultMutableTreeNode parent,int where)
{
DefaultMutableTreeNode n=new DefaultMutableTreeNode(f.toString());
//////////////////////////
if(treeModel==null){
treeModel=new DefaultTreeModel(parent);
treeModel.insertNodeInto(n,parent,where); //加一句
}
else
treeModel.insertNodeInto(n,parent,where);
........
}经过以上修改,磁盘树可以出来,至于其他功能没有验证
此外,如果你的硬盘文件多的话,注意你的内存是否能承受住
(我硬盘上有50G内容,机器没死也差不多了,我试验代码如下:
private void buildTree()
{
File[] list= new File[2];//File.listRoots();
list[0]=new File("c:\\");
list[1]=new File("f:\\");
//System.out.println(list.length);
for(int i=0;i<list.length;i++)
if(list[i].exists()){
buildTree(list[i],root,0);
}
即仅测试c和f盘
应该考虑优化,点击后再动态生成子树,可能楼主本意如此,再改改吧
)