读书人

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

发布时间: 2012-09-02 21:00:34 作者: rapoo

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));
}
}

读书人网 >编程

热点推荐