swing中我想遍历文件夹和里面的子文件,然后用JTree获得一个有目录结构的树,不知道怎么实现

swing中我想遍历文件夹和里面的子文件,然后用JTree获得一个有目录结构的树,不知道怎么实现,第1张

遍历方法:在java里面,文件粗猛和文件夹都由File对象表示,区分方法:file.isDirectory(),即文件对象是不是文件夹,如果是文件夹,则调用File[] listFiles = file.listFiles(),明凳余获取文件夹中的所有激滚文件对象

有了遍历方法,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]))

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8154145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存