各位,菜鸟问如何建立目录树,开口有分了。

chengt 2001-10-31 04:44:36
...全文
138 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
52java 2001-11-05
  • 打赏
  • 举报
回复
好大一棵树
chengt 2001-11-05
  • 打赏
  • 举报
回复
结账
chengt 2001-11-01
  • 打赏
  • 举报
回复
jimw大哥,简单到是简单,只是谁能受得了753854个目录和文件的搜索。相比之下gdsean(摇滚java)大哥的方法到是不错。非常的好还能自己定义一些选项。各位还有没有其他的方法,没有的话就结账了。

~~~小二,买单~~~。(野花剔着牙眼瞅着刚刚迈出门去的苗条少女,喊着。) 

~~~来啦,您那,一共是753854元!!!小二低着头看着野花,手托着盘子,盘子里放着象《Java 2 编程详解》一样厚的一打菜单。

·#¥245¥%1—%…… “ 嘭!!叮当嘻哗啪,啪—*……”野花从椅子上直窜了上去,头重重的碰在了吊灯上,随后又与吊灯一起重重的砸在小儿身上……

study_vc 2001-11-01
  • 打赏
  • 举报
回复
很好,学习学习/
jimw 2001-10-31
  • 打赏
  • 举报
回复
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class LeftTree extends JPanel {

private JPopupMenu popupMenu;
private JTree tree;
private DefaultMutableTreeNode top;

private String rootDirectory;
public LeftTree(String rootDirectory) {
this.rootDirectory = rootDirectory;

setLayout(new BorderLayout());
top = new DefaultMutableTreeNode(GlobalVar.SERVERNAME);
tree = new JTree(top);
tree.putClientProperty("JTree.lineStyle", "Angled");

tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);

tree.addTreeSelectionListener(new TreeSeleListener());
tree.addMouseListener(new rightMouseListener());

add(new JScrollPane(tree),BorderLayout.CENTER);

Thread t = new Thread(new ListDirectory(top,rootDirectory));
t.start();
}

public static void main(String args[]) {
JFrame frame = new JFrame("LeftTree");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

frame.setContentPane(new LeftTree("c:/"));
frame.pack();
frame.setVisible(true);
}
}

class ListDirectory extends Thread{
DefaultMutableTreeNode rootNode;
String rootDirectory;

public ListDirectory(DefaultMutableTreeNode website,
String rootDirectory) {
rootNode = website;
this.rootDirectory = rootDirectory;
}

public void run() {
this.addLeaf(rootNode,rootDirectory);
}

void addLeaf(DefaultMutableTreeNode subNode,
String filepath) {
File path = new File(filepath);
String[] list;
list = path.list();
String filename;

for (int i = 0; i < list.length; i++) {
DefaultMutableTreeNode fileNode = new
DefaultMutableTreeNode(list[i]);
subNode.add(fileNode);
filename = filepath + "\\" + list[i];
path = new File(filename);
if (path.isDirectory())
addLeaf(fileNode,filename);
}
}
}
gdsean 2001-10-31
  • 打赏
  • 举报
回复
忘记修改了,这是我用的程序,你得修改:

把import com.borland.jbcl.layout.*;去掉

修改public static final ImageIcon ICON_COMPUTER =
new ImageIcon(FrameMain.class.getResource("images/paste.gif"));

public static final ImageIcon ICON_COMPUTER =
new ImageIcon("images/paste.gif")
其他图标一样修改

skyyoung 2001-10-31
  • 打赏
  • 举报
回复
查找论坛,有
gdsean 2001-10-31
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

public class ChooseDir extends JDialog
{
public static final ImageIcon ICON_COMPUTER =
new ImageIcon(FrameMain.class.getResource("computer.gif"));
public static final ImageIcon ICON_DISK =
new ImageIcon(FrameMain.class.getResource("disk.gif"));
public static final ImageIcon ICON_FOLDER =
new ImageIcon(FrameMain.class.getResource("folder.gif"));
public static final ImageIcon ICON_EXPANDEDFOLDER =
new ImageIcon(FrameMain.class.getResource("expandedfolder.gif"));
JButton jButtonOK = new JButton("OK");
JButton jButtonCancel = new JButton("Cancel");
protected JTree m_tree;
protected DefaultTreeModel m_model;
protected JTextField m_display;
JTextField m_textPath;

public ChooseDir(JTextField jTextpath)
{
//super("Directories Tree");
this.setModal(true);
setSize(400, 300);
m_textPath = jTextpath;

DefaultMutableTreeNode top = new DefaultMutableTreeNode(
new IconData(ICON_COMPUTER, null, "Computer"));
jButtonOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButtonOK_actionPerformed(e);
}
});
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButtonCancel_actionPerformed(e);
}
});
DefaultMutableTreeNode node;
File[] roots = File.listRoots();
for (int k=0; k < roots.length; k++)
{
node = new DefaultMutableTreeNode(new IconData(ICON_DISK,
null, new FileNode(roots[k])));
top.add(node);
node.add( new DefaultMutableTreeNode(new Boolean(true)));
}

m_model = new DefaultTreeModel(top);
m_tree = new JTree(m_model);

m_tree.putClientProperty("JTree.lineStyle", "Angled");

TreeCellRenderer renderer = new IconCellRenderer();
m_tree.setCellRenderer(renderer);

m_tree.addTreeExpansionListener(new DirExpansionListener());

m_tree.addTreeSelectionListener(new DirSelectionListener());

m_tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
m_tree.setShowsRootHandles(true);
m_tree.setEditable(false);

JScrollPane s = new JScrollPane();
s.getViewport().add(m_tree);
getContentPane().add(s, BorderLayout.CENTER);

m_display = new JTextField();
m_display.setEditable(false);
getContentPane().add(m_display, BorderLayout.NORTH);
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
p1.add(jButtonOK,BorderLayout.WEST);
p1.add(jButtonCancel,BorderLayout.EAST);
getContentPane().add(p1,BorderLayout.SOUTH);

}
void jButtonOK_actionPerformed(ActionEvent e){
setVisible(false);
}
void jButtonCancel_actionPerformed(ActionEvent e) {
m_textPath.setText("");
setVisible(false);
}
DefaultMutableTreeNode getTreeNode(TreePath path)
{
return (DefaultMutableTreeNode)(path.getLastPathComponent());
}

FileNode getFileNode(DefaultMutableTreeNode node)
{
if (node == null)
return null;
Object obj = node.getUserObject();
if (obj instanceof IconData)
obj = ((IconData)obj).getObject();
if (obj instanceof FileNode)
return (FileNode)obj;
else
return null;
}

// Make sure expansion is threaded and updating the tree model
// only occurs within the event dispatching thread.
class DirExpansionListener implements TreeExpansionListener
{
public void treeExpanded(TreeExpansionEvent event)
{
final DefaultMutableTreeNode node = getTreeNode(
event.getPath());
final FileNode fnode = getFileNode(node);

Thread runner = new Thread()
{
public void run()
{
if (fnode != null && fnode.expand(node))
{
Runnable runnable = new Runnable()
{
public void run()
{
m_model.reload(node);
}
};
SwingUtilities.invokeLater(runnable);
}
}
};
runner.start();
}

public void treeCollapsed(TreeExpansionEvent event) {}
}


class DirSelectionListener implements TreeSelectionListener
{
public void valueChanged(TreeSelectionEvent event)
{
DefaultMutableTreeNode node = getTreeNode(
event.getPath());
FileNode fnode = getFileNode(node);
if (fnode != null){
m_display.setText(fnode.getFile().getPath());
m_textPath.setText(fnode.getFile().getPath());
}
else
m_display.setText("");
}
}
}

class IconCellRenderer extends JLabel implements TreeCellRenderer
{
protected Color m_textSelectionColor;
protected Color m_textNonSelectionColor;
protected Color m_bkSelectionColor;
protected Color m_bkNonSelectionColor;
protected Color m_borderSelectionColor;

protected boolean m_selected;

public IconCellRenderer()
{
super();
m_textSelectionColor = UIManager.getColor(
"Tree.selectionForeground");
m_textNonSelectionColor = UIManager.getColor(
"Tree.textForeground");
m_bkSelectionColor = UIManager.getColor(
"Tree.selectionBackground");
m_bkNonSelectionColor = UIManager.getColor(
"Tree.textBackground");
m_borderSelectionColor = UIManager.getColor(
"Tree.selectionBorderColor");
setOpaque(false);
}

public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus)

{
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)value;
Object obj = node.getUserObject();
setText(obj.toString());

if (obj instanceof Boolean)
setText("Retrieving data...");

if (obj instanceof IconData)
{
IconData idata = (IconData)obj;
if (expanded)
setIcon(idata.getExpandedIcon());
else
setIcon(idata.getIcon());
}
else
setIcon(null);

setFont(tree.getFont());
setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
m_selected = sel;
return this;
}

public void paintComponent(Graphics g)
{
Color bColor = getBackground();
Icon icon = getIcon();

g.setColor(bColor);
int offset = 0;
if(icon != null && getText() != null)
offset = (icon.getIconWidth() + getIconTextGap());
g.fillRect(offset, 0, getWidth() - 1 - offset,
getHeight() - 1);

if (m_selected)
{
g.setColor(m_borderSelectionColor);
g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
}
super.paintComponent(g);
}
}

class IconData
{
protected Icon m_icon;
protected Icon m_expandedIcon;
protected Object m_data;

public IconData(Icon icon, Object data)
{
m_icon = icon;
m_expandedIcon = null;
m_data = data;
}

public IconData(Icon icon, Icon expandedIcon, Object data)
{
m_icon = icon;
m_expandedIcon = expandedIcon;
m_data = data;
}

public Icon getIcon()
{
return m_icon;
}

public Icon getExpandedIcon()
{
return m_expandedIcon!=null ? m_expandedIcon : m_icon;
}

public Object getObject()
{
return m_data;
}

public String toString()
{
return m_data.toString();
}
}

class FileNode
{
protected File m_file;

public FileNode(File file)
{
m_file = file;
}

public File getFile()
{
return m_file;
}

public String toString()
{
return m_file.getName().length() > 0 ? m_file.getName() :
m_file.getPath();
}

public boolean expand(DefaultMutableTreeNode parent)
{
DefaultMutableTreeNode flag =
(DefaultMutableTreeNode)parent.getFirstChild();
if (flag==null) // No flag
return false;
Object obj = flag.getUserObject();
if (!(obj instanceof Boolean))
return false; // Already expanded

parent.removeAllChildren(); // Remove Flag

File[] files = listFiles();
if (files == null)
return true;

Vector v = new Vector();

for (int k = 0; k < files.length; k++)
{
File f = files[k];
if (!(f.isDirectory()))
continue;

FileNode newNode = new FileNode(f);

boolean isAdded = false;
for (int i = 0; i < v.size(); i++)
{
FileNode nd = (FileNode)v.elementAt(i);
if (newNode.compareTo(nd) < 0)
{
v.insertElementAt(newNode, i);
isAdded = true;
break;
}
}
if (!isAdded)
v.addElement(newNode);
}

for (int i = 0; i < v.size(); i++)
{
FileNode nd = (FileNode)v.elementAt(i);
IconData idata = new IconData(ChooseDir.ICON_FOLDER,
ChooseDir.ICON_EXPANDEDFOLDER, nd);
DefaultMutableTreeNode node = new
DefaultMutableTreeNode(idata);
parent.add(node);

if (nd.hasSubDirs())
node.add(new DefaultMutableTreeNode(
new Boolean(true) ));
}

return true;
}

public boolean hasSubDirs()
{
File[] files = listFiles();
if (files == null)
return false;
for (int k = 0; k < files.length; k++)
{
if (files[k].isDirectory())
return true;
}
return false;
}

public int compareTo(FileNode toCompare)
{
return m_file.getName().compareToIgnoreCase(
toCompare.m_file.getName() );
}

protected File[] listFiles()
{
if (!m_file.isDirectory())
return null;
try
{
return m_file.listFiles();
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(null,
"Error reading directory "+m_file.getAbsolutePath(),
"Warning", JOptionPane.WARNING_MESSAGE);
return null;
}
}
}

gdsean 2001-10-31
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import com.borland.jbcl.layout.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

public class ChooseDir extends JDialog
{
public static final ImageIcon ICON_COMPUTER =
new ImageIcon(FrameMain.class.getResource("images/paste.gif"));
public static final ImageIcon ICON_DISK =
new ImageIcon(FrameMain.class.getResource("images/new.gif"));
public static final ImageIcon ICON_FOLDER =
new ImageIcon(FrameMain.class.getResource("images/folder.gif"));
public static final ImageIcon ICON_EXPANDEDFOLDER =
new ImageIcon(FrameMain.class.getResource("images/expandedfolder.gif"));
JButton jButtonOK = new JButton("OK");
JButton jButtonCancel = new JButton("Cancel");
protected JTree m_tree;
protected DefaultTreeModel m_model;
protected JTextField m_display;
JTextField m_textPath;

public ChooseDir(JTextField jTextpath)
{
//super("Directories Tree");
this.setModal(true);
setSize(400, 300);
m_textPath = jTextpath;

DefaultMutableTreeNode top = new DefaultMutableTreeNode(
new IconData(ICON_COMPUTER, null, "Computer"));
jButtonOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButtonOK_actionPerformed(e);
}
});
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButtonCancel_actionPerformed(e);
}
});
DefaultMutableTreeNode node;
File[] roots = File.listRoots();
for (int k=0; k < roots.length; k++)
{
node = new DefaultMutableTreeNode(new IconData(ICON_DISK,
null, new FileNode(roots[k])));
top.add(node);
node.add( new DefaultMutableTreeNode(new Boolean(true)));
}

m_model = new DefaultTreeModel(top);
m_tree = new JTree(m_model);

m_tree.putClientProperty("JTree.lineStyle", "Angled");

TreeCellRenderer renderer = new IconCellRenderer();
m_tree.setCellRenderer(renderer);

m_tree.addTreeExpansionListener(new DirExpansionListener());

m_tree.addTreeSelectionListener(new DirSelectionListener());

m_tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
m_tree.setShowsRootHandles(true);
m_tree.setEditable(false);

JScrollPane s = new JScrollPane();
s.getViewport().add(m_tree);
getContentPane().add(s, BorderLayout.CENTER);

m_display = new JTextField();
m_display.setEditable(false);
getContentPane().add(m_display, BorderLayout.NORTH);
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
p1.add(jButtonOK,BorderLayout.WEST);
p1.add(jButtonCancel,BorderLayout.EAST);
getContentPane().add(p1,BorderLayout.SOUTH);

}
void jButtonOK_actionPerformed(ActionEvent e){
setVisible(false);
}
void jButtonCancel_actionPerformed(ActionEvent e) {
m_textPath.setText("");
setVisible(false);
}
DefaultMutableTreeNode getTreeNode(TreePath path)
{
return (DefaultMutableTreeNode)(path.getLastPathComponent());
}

FileNode getFileNode(DefaultMutableTreeNode node)
{
if (node == null)
return null;
Object obj = node.getUserObject();
if (obj instanceof IconData)
obj = ((IconData)obj).getObject();
if (obj instanceof FileNode)
return (FileNode)obj;
else
return null;
}

// Make sure expansion is threaded and updating the tree model
// only occurs within the event dispatching thread.
class DirExpansionListener implements TreeExpansionListener
{
public void treeExpanded(TreeExpansionEvent event)
{
final DefaultMutableTreeNode node = getTreeNode(
event.getPath());
final FileNode fnode = getFileNode(node);

Thread runner = new Thread()
{
public void run()
{
if (fnode != null && fnode.expand(node))
{
Runnable runnable = new Runnable()
{
public void run()
{
m_model.reload(node);
}
};
SwingUtilities.invokeLater(runnable);
}
}
};
runner.start();
}

public void treeCollapsed(TreeExpansionEvent event) {}
}


class DirSelectionListener implements TreeSelectionListener
{
public void valueChanged(TreeSelectionEvent event)
{
DefaultMutableTreeNode node = getTreeNode(
event.getPath());
FileNode fnode = getFileNode(node);
if (fnode != null){
m_display.setText(fnode.getFile().getPath());
m_textPath.setText(fnode.getFile().getPath());
}
else
m_display.setText("");
}
}
}

class IconCellRenderer extends JLabel implements TreeCellRenderer
{
protected Color m_textSelectionColor;
protected Color m_textNonSelectionColor;
protected Color m_bkSelectionColor;
protected Color m_bkNonSelectionColor;
protected Color m_borderSelectionColor;

protected boolean m_selected;

public IconCellRenderer()
{
super();
m_textSelectionColor = UIManager.getColor(
"Tree.selectionForeground");
m_textNonSelectionColor = UIManager.getColor(
"Tree.textForeground");
m_bkSelectionColor = UIManager.getColor(
"Tree.selectionBackground");
m_bkNonSelectionColor = UIManager.getColor(
"Tree.textBackground");
m_borderSelectionColor = UIManager.getColor(
"Tree.selectionBorderColor");
setOpaque(false);
}

public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus)

{
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)value;
Object obj = node.getUserObject();
setText(obj.toString());

if (obj instanceof Boolean)
setText("Retrieving data...");

if (obj instanceof IconData)
{
IconData idata = (IconData)obj;
if (expanded)
setIcon(idata.getExpandedIcon());
else
setIcon(idata.getIcon());
}
else
setIcon(null);

setFont(tree.getFont());
setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
m_selected = sel;
return this;
}

public void paintComponent(Graphics g)
{
Color bColor = getBackground();
Icon icon = getIcon();

g.setColor(bColor);
int offset = 0;
if(icon != null && getText() != null)
offset = (icon.getIconWidth() + getIconTextGap());
g.fillRect(offset, 0, getWidth() - 1 - offset,
getHeight() - 1);

if (m_selected)
{
g.setColor(m_borderSelectionColor);
g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
}
super.paintComponent(g);
}
}

class IconData
{
protected Icon m_icon;
protected Icon m_expandedIcon;
protected Object m_data;

public IconData(Icon icon, Object data)
{
m_icon = icon;
m_expandedIcon = null;
m_data = data;
}

public IconData(Icon icon, Icon expandedIcon, Object data)
{
m_icon = icon;
m_expandedIcon = expandedIcon;
m_data = data;
}

public Icon getIcon()
{
return m_icon;
}

public Icon getExpandedIcon()
{
return m_expandedIcon!=null ? m_expandedIcon : m_icon;
}

public Object getObject()
{
return m_data;
}

public String toString()
{
return m_data.toString();
}
}

class FileNode
{
protected File m_file;

public FileNode(File file)
{
m_file = file;
}

public File getFile()
{
return m_file;
}

public String toString()
{
return m_file.getName().length() > 0 ? m_file.getName() :
m_file.getPath();
}

public boolean expand(DefaultMutableTreeNode parent)
{
DefaultMutableTreeNode flag =
(DefaultMutableTreeNode)parent.getFirstChild();
if (flag==null) // No flag
return false;
Object obj = flag.getUserObject();
if (!(obj instanceof Boolean))
return false; // Already expanded

parent.removeAllChildren(); // Remove Flag

File[] files = listFiles();
if (files == null)
return true;

Vector v = new Vector();

for (int k = 0; k < files.length; k++)
{
File f = files[k];
if (!(f.isDirectory()))
continue;

FileNode newNode = new FileNode(f);

boolean isAdded = false;
for (int i = 0; i < v.size(); i++)
{
FileNode nd = (FileNode)v.elementAt(i);
if (newNode.compareTo(nd) < 0)
{
v.insertElementAt(newNode, i);
isAdded = true;
break;
}
}
if (!isAdded)
v.addElement(newNode);
}

for (int i = 0; i < v.size(); i++)
{
FileNode nd = (FileNode)v.elementAt(i);
IconData idata = new IconData(ChooseDir.ICON_FOLDER,
ChooseDir.ICON_EXPANDEDFOLDER, nd);
DefaultMutableTreeNode node = new
DefaultMutableTreeNode(idata);
parent.add(node);

if (nd.hasSubDirs())
node.add(new DefaultMutableTreeNode(
new Boolean(true) ));
}

return true;
}

public boolean hasSubDirs()
{
File[] files = listFiles();
if (files == null)
return false;
for (int k = 0; k < files.length; k++)
{
if (files[k].isDirectory())
return true;
}
return false;
}

public int compareTo(FileNode toCompare)
{
return m_file.getName().compareToIgnoreCase(
toCompare.m_file.getName() );
}

protected File[] listFiles()
{
if (!m_file.isDirectory())
return null;
try
{
return m_file.listFiles();
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(null,
"Error reading directory "+m_file.getAbsolutePath(),
"Warning", JOptionPane.WARNING_MESSAGE);
return null;
}
}
}

chengt 2001-10-31
  • 打赏
  • 举报
回复
我想搜索当前计算机的所有目录生成JTree,该怎样做才好,有没有例子可以参考。
不要告诉我先搜索全部路径再创建JTree,那样我会疯的。我的C盘有753854个目录和文件。
czb 2001-10-31
  • 打赏
  • 举报
回复
用java I/O File类中的boolean mkdir();函数,它可以根据当前对象生成一个由该对象指定的路径。

62,614

社区成员

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

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