import javax.swing.*; import javax.swing.tree.*;class tree extends JFrame { //DefaultTreeCellEditor dt; //DefaultTreeCellRenderer r = new DefaultTreeCellRenderer();
JPanel panel = new JPanel(); String s[][] = {{"a","s"},{"w","f","m"}}; //String s[] = {"1","2"}; tree() { JTree tree = new JTree();
tree = new JTree(this.createTreeModel());//根据树模型创建树。树模型用于运行时动态增加树中结点时进行更新显示。 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
con = this.getContentPane(); jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); con.add(jsp);
jscroll = new JScrollPane(); jscroll.getViewport().add(tree);
jsp.add(jscroll);
jsp2 = new JScrollPane(); jta = new JTextArea(3,30); jsp2.getViewport().add(jta); jsp.add(jsp2);
this.setTitle("JTree示例:文件目录浏览"); this.setSize(800,600); tree.addTreeExpansionListener(new TreeExpanded());//树扩展与折叠事件,扩展时才真正增加树结点。 tree.addTreeSelectionListener(//树结点选择事件。用于显示文件属性。 new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { // TODO Auto-generated method stub FileNode o =(FileNode)tree.getLastSelectedPathComponent();//取所选择的结点
看看这个
sun公司的关于JTree的帮助文档,不过是英文版的(目前还没有中文版),感兴趣可以看一下。
用File类获得每个文件夹下的文件和文件夹,加入到JTree控件中就可以实现楼主所要的功能
import javax.swing.tree.*;class tree extends JFrame
{
//DefaultTreeCellEditor dt;
//DefaultTreeCellRenderer r = new DefaultTreeCellRenderer();
JPanel panel = new JPanel();
String s[][] = {{"a","s"},{"w","f","m"}};
//String s[] = {"1","2"};
tree()
{
JTree tree = new JTree();
//tree.addSelectionInterval(1,0);
//tree.addSelectionRow(2);
panel.add(tree);
this.add(panel);
this.setSize(300,300);
this.show();
}
public static void main(String s[])
{
new tree();
}
}
import javax.swing.*;
import java.awt.*;
import java.io.*;import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;public class TestJTree extends JFrame{ /**
* @param args
*/
private Container con = null;
private JTree tree = null;
private FileNode root = null;
private JSplitPane jsp = null;
private JScrollPane jscroll = null,jsp2=null;
private JTextArea jta = null;
public TestJTree()
{
tree = new JTree(this.createTreeModel());//根据树模型创建树。树模型用于运行时动态增加树中结点时进行更新显示。
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
con = this.getContentPane();
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
con.add(jsp);
jscroll = new JScrollPane();
jscroll.getViewport().add(tree);
jsp.add(jscroll);
jsp2 = new JScrollPane();
jta = new JTextArea(3,30);
jsp2.getViewport().add(jta);
jsp.add(jsp2);
this.setTitle("JTree示例:文件目录浏览");
this.setSize(800,600);
tree.addTreeExpansionListener(new TreeExpanded());//树扩展与折叠事件,扩展时才真正增加树结点。
tree.addTreeSelectionListener(//树结点选择事件。用于显示文件属性。
new TreeSelectionListener()
{ public void valueChanged(TreeSelectionEvent e) {
// TODO Auto-generated method stub
FileNode o =(FileNode)tree.getLastSelectedPathComponent();//取所选择的结点
if( o==null || o.isRoot() )
{
return;
}
File file = (File)o.getUserObject();
if( file == null ) return;
jta.setText("");
jta.append(""+(file.isFile()?"这是文件":"这是目录")+"\n");
jta.append("文件大小:"+file.length()+"\n");
jta.append("文件可读:"+(file.canRead()?"可读":"不可读"));
}
}
);
this.setVisible(true);
}
private void createRoots(FileNode f)
{//在“我的电脑”下建立子结点如:c:\、d:\、等等。
if(f.hasExpanded==false)
{
f.hasExpanded=true;
File[] disks = File.listRoots();
for(int i=0;i<disks.length;i++)
{
FileNode r = new FileNode(disks[i]);
f.add(r);
}//for(i)
}//if
}
private DefaultTreeModel createTreeModel()
{//建立树模型。
root = new FileNode("我的电脑");
createRoots(root);
return new DefaultTreeModel(root);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestJTree();
}
private class TreeExpanded implements TreeExpansionListener
{ public void treeCollapsed(TreeExpansionEvent event) {
// TODO Auto-generated method stub
//树折叠事件。不用处理。
} public void treeExpanded(TreeExpansionEvent event) {
// TODO Auto-generated method stub
//树扩展或展开事件。
TreePath path = event.getPath();//取要展开的树结点
FileNode o =(FileNode)path.getLastPathComponent();//取要展开的树结点
if( o==null || o.hasExpanded || o.isRoot() ) return;
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();//获取树模型
o.explore();//在该结点下真正增加下一层的树结点
model.nodeStructureChanged(o);//由于树结构发生变化,由模型通知JTree的视图,进行显示画面上的更新。
}
}
}
import javax.swing.*;
import javax.swing.tree.*;
import java.io.*;public class FileNode extends DefaultMutableTreeNode{
protected boolean hasExpanded = false;//是否已展开过?即是否已建立了子结点。
public FileNode()
{//默认构造器
super();
}
public FileNode(String myComputer)
{
this.setUserObject(myComputer);
}
public FileNode(File f)
{
this.setUserObject(f);
}
public boolean getAllowsChildren()
{//重写:允许有儿子否?
if(this.userObject == null )
{
return false;
}
if(this.userObject instanceof String )
{//处理最顶层的"我的电脑"
return true;
}
File f = (File)this.userObject;
return f.isDirectory();//是目录,则允许有儿子。否则:没有
}
public boolean isLeaf()
{//重写:是文件还是空的文件夹?只有文件才是叶子。空的文件夹不是叶子。
if(this.userObject == null )
{
return true;
}
if(this.userObject instanceof String )
{//处理最顶层的"我的电脑"
return false;
}
File f = (File)this.userObject;
return !f.isDirectory();//是文件则是叶子
}
public String toString()
{
if( this.userObject==null )
{
return "";
}
if(this.userObject instanceof String )
{//处理最顶层的"我的电脑"
return ""+this.userObject;
}
File f = (File)this.userObject;
String fileName = f.toString();
int index = fileName.lastIndexOf("\\");
return (index!=-1 && index != fileName.length()-1 )?
fileName.substring(index+1)://取出文件名部分
fileName; //完整路径名
}
public void explore()
{//扩展儿子结点
if(!hasExpanded)
{//若还没有扩展
hasExpanded = true;//设置已扩展过。
File f = (File)this.userObject;
File[] files = f.listFiles();
for(int i=0;i<files.length;i++)
{
FileNode r = new FileNode(files[i]);
this.add(r);//此时才真正在树中添加结点。
}//for(i)
}//if
}//explore
}//class