首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Swing树形构造,加载文件夹目录

2012-09-02 
Swing树形结构,加载文件夹目录Swing树形结构加载文件夹目录:1:点击相应文件夹才加载下面的节点,单独添加一

Swing树形结构,加载文件夹目录
Swing树形结构加载文件夹目录:
1:点击相应文件夹才加载下面的节点,单独添加一个节点,显示是一个单纯的节点,
节点前面的图标没有加号和那个文件夹图标,在这里默认在下面加入个noFlag
标记节点,还有一种方法自己写JTree的 Editor Render ,自己制定显示样式,
那样子可以喝windows的做得差不多

2:展开节点时,首先;移除noFlag节点,在读取文件夹下面的内容,无内容再加上noFlag节点

//第一层加载
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("所有粒子");
        List<String> fileList = showFileList();
        if (particleList.size() == 0) {
            DefaultMutableTreeNode noParticle = new DefaultMutableTreeNode(NO_PARTICLE);
            rootNode.add(noParticle);
        }
        else {
            for (String s : fileList) {
                DefaultMutableTreeNode node = new DefaultMutableTreeNode(s);
                if (!node.toString().endsWith(".psa")) {//第一层文件夹下面可能有文件
                    DefaultMutableTreeNode noFlag = new DefaultMutableTreeNode(NO_FLAG);
                    node.add(noFlag);
                }
                rootNode.add(node);
            }
        }


    private List<String> showParticleList() {
        String ps_path = "D:/DEPOT/particle";
        List<String> list = new ArrayList<String>();
        File psFile = new File(ps_path);
        if (psFile.exists()) {
            File[] listFile = psFile.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {//过滤不需要显示的文件
                    return pathname.getName().endsWith(".psa") || pathname.getName().endsWith(".PSA") || pathname.isDirectory();
                }
            });
            for (File file : listFile) {
                list.add(file.getName());
            }
        }
        return list;
    }

//按需加载  展开相应节点时事件触发调用
  @Override
    public void treeExpanded(TreeExpansionEvent event) {
        TreePath treePath = event.getPath();
        final DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) treePath.getLastPathComponent();
        if (selectedNode.getFirstChild().toString().equalsIgnoreCase(NO_FLAG)) {
            selectedNode.remove(0);
            SwingUtilities.invokeLater(new Runnable() { //重新加载 选中节点下得数据  SwingUtilities.invokeLater()这个相当有用
                @Override
                public void run() {
                    TreeNode[] childNode = selectedNode.getPath();
//构建树形或得的相对路径,在保存节点位置有用
                    StringBuilder path = new StringBuilder();
                    for (int i = 1; i < childNode.length; i++) {
                        String s = childNode[i].toString();
                        if (i < childNode.length - 1) {
                            path.append(s).append("/");
                        }
                        else {
                            path.append(s);
                        }
                    }
                  //  Engine.getInstance().setLocalMode(false);
                    loadAsset( "D:/DEPOT/particle/psa/" + path, selectedNode);
                    //Engine.getInstance().setLocalMode(true);
                    particleTree.updateUI();//添加移除节点都要调用这个方法,树形才会更新
                }

            });
        }

    }

//加载目录下的内容
private void loadAsset(String path, DefaultMutableTreeNode selectedNode) {
        File file = new File(path);
        File[] folders = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file1) {
                return file1.isDirectory() || file1.getName().endsWith(".psa");
            }
        });
        if (folders != null && folders.length != 0) {
            for (File folder : folders) {
                if (folder.isDirectory()) { //如果是文件夹,创建含有子节点的节点
                    DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(folder.getName());
                    newChild.add(new DefaultMutableTreeNode(NO_FLAG));
                    selectedNode.add(newChild);
                }
                else {
                    DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(folder.getName());
                    selectedNode.add(newChild);
                }
            }
        }
        else {
            selectedNode.add(new EquipTreeNode(NO_FLAG));
        }
    }

热点排行