有了遍历方法,JTree的生成就简单了,无非是在遍历过程中把文件对象按深度添加到树上罢了
为了避免逗弯目录列举消耗时间过长,请指定一个目录来模拟,命令行参数:代表路径的字符唤嫌串.如果认可代码,请山链闷加分50,谢谢
----
import javax.swing.*
import javax.swing.tree.*
import java.awt.*
import java.io.*
final public class FileTree extends JFrame {
public FileTree(File dir) throws HeadlessException {
super("File Tree")
JTree tree
add(new JScrollPane(tree =new JTree(buildTreeModel(dir))))
tree.setCellRenderer(new FileTreeRenderer())
setSize(400,600)
setVisible(true)
}
private TreeModel buildTreeModel(File dir){
DefaultMutableTreeNode root = new DefaultMutableTreeNode(dir)
walkthrough(dir,root)
return new DefaultTreeModel(root)
}
private static void walkthrough(File f,DefaultMutableTreeNode node){
for (File fle : f.listFiles()) {
DefaultMutableTreeNode n = new DefaultMutableTreeNode(fle)
node.add(n)
if (fle.isDirectory()){
walkthrough(fle, n)
}
}
}
private class FileTreeRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
JLabel cmp = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus)
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode)value
Object obj = n.getUserObject()
if (obj instanceof File) {
File f = (File)obj
cmp.setText(f.getName())
cmp.setForeground(f.isDirectory()?Color.BLUE:Color.BLACK)
}
}
return cmp
}
}
public static void main(String[] args) {
new FileTree(new File(args[0]))
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)