|
|
@ -1,10 +1,11 @@ |
|
|
|
package com.fr.design.gui.itree.filetree; |
|
|
|
package com.fr.design.gui.itree.filetree; |
|
|
|
|
|
|
|
|
|
|
|
import com.fr.base.BaseUtils; |
|
|
|
|
|
|
|
import com.fr.design.i18n.Toolkit; |
|
|
|
import com.fr.design.i18n.Toolkit; |
|
|
|
import com.fr.general.ComparatorUtils; |
|
|
|
import com.fr.general.ComparatorUtils; |
|
|
|
|
|
|
|
import com.fr.general.IOUtils; |
|
|
|
import com.fr.stable.ArrayUtils; |
|
|
|
import com.fr.stable.ArrayUtils; |
|
|
|
import com.fr.stable.project.ProjectConstants; |
|
|
|
import com.fr.stable.project.ProjectConstants; |
|
|
|
|
|
|
|
import org.jetbrains.annotations.Nullable; |
|
|
|
|
|
|
|
|
|
|
|
import javax.swing.Icon; |
|
|
|
import javax.swing.Icon; |
|
|
|
import javax.swing.JTree; |
|
|
|
import javax.swing.JTree; |
|
|
@ -29,7 +30,8 @@ import java.util.Stack; |
|
|
|
* File Tree. |
|
|
|
* File Tree. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class JFileTree extends AbstractFileTree { |
|
|
|
public class JFileTree extends AbstractFileTree { |
|
|
|
protected FileFilter fileFilter; |
|
|
|
|
|
|
|
|
|
|
|
private FileFilter fileFilter; |
|
|
|
|
|
|
|
|
|
|
|
public JFileTree() { |
|
|
|
public JFileTree() { |
|
|
|
this(null); |
|
|
|
this(null); |
|
|
@ -68,11 +70,11 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
DefaultMutableTreeNode rootTreeNode = (DefaultMutableTreeNode) defaultTreeModel.getRoot(); |
|
|
|
DefaultMutableTreeNode rootTreeNode = (DefaultMutableTreeNode) defaultTreeModel.getRoot(); |
|
|
|
rootTreeNode.removeAllChildren(); |
|
|
|
rootTreeNode.removeAllChildren(); |
|
|
|
|
|
|
|
|
|
|
|
for (int k = 0; k < rootFiles.length; k++) { |
|
|
|
for (File rootFile : rootFiles) { |
|
|
|
DefaultMutableTreeNode node = new DefaultMutableTreeNode(new RootFile(rootFiles[k])); |
|
|
|
DefaultMutableTreeNode node = new DefaultMutableTreeNode(new RootFile(rootFile)); |
|
|
|
rootTreeNode.add(node); |
|
|
|
rootTreeNode.add(node); |
|
|
|
|
|
|
|
|
|
|
|
if (rootFiles[k].isDirectory()) { |
|
|
|
if (rootFile.isDirectory()) { |
|
|
|
node.add(new DefaultMutableTreeNode(Boolean.TRUE)); |
|
|
|
node.add(new DefaultMutableTreeNode(Boolean.TRUE)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -93,6 +95,7 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
this.fileFilter = fileFilter; |
|
|
|
this.fileFilter = fileFilter; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
public File getSelectedFile() { |
|
|
|
public File getSelectedFile() { |
|
|
|
TreePath selectedTreePath = this.getSelectionPath(); |
|
|
|
TreePath selectedTreePath = this.getSelectionPath(); |
|
|
|
if (selectedTreePath == null) { |
|
|
|
if (selectedTreePath == null) { |
|
|
@ -140,7 +143,7 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
File rootFile = rootLocalFile.getFile(); |
|
|
|
File rootFile = rootLocalFile.getFile(); |
|
|
|
// 是父子关系,开始找孩子.
|
|
|
|
// 是父子关系,开始找孩子.
|
|
|
|
if (AbstractFileTree.isParentFile(rootFile, currentFile)) { |
|
|
|
if (AbstractFileTree.isParentFile(rootFile, currentFile)) { |
|
|
|
Stack nameStack = new Stack(); // 将所有的名字加入Stack.
|
|
|
|
Stack<String> nameStack = new Stack<>(); // 将所有的名字加入Stack.
|
|
|
|
while (true) { |
|
|
|
while (true) { |
|
|
|
if (ComparatorUtils.equals(rootFile, currentFile)) { |
|
|
|
if (ComparatorUtils.equals(rootFile, currentFile)) { |
|
|
|
break; |
|
|
|
break; |
|
|
@ -153,7 +156,7 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
} |
|
|
|
} |
|
|
|
DefaultMutableTreeNode curChildTreeNode = rootChildTreeNode; |
|
|
|
DefaultMutableTreeNode curChildTreeNode = rootChildTreeNode; |
|
|
|
while (!nameStack.isEmpty()) { |
|
|
|
while (!nameStack.isEmpty()) { |
|
|
|
String name = (String) nameStack.pop(); |
|
|
|
String name = nameStack.pop(); |
|
|
|
this.expandTreeNode(curChildTreeNode); |
|
|
|
this.expandTreeNode(curChildTreeNode); |
|
|
|
for (int j = 0; j < curChildTreeNode.getChildCount(); j++) { |
|
|
|
for (int j = 0; j < curChildTreeNode.getChildCount(); j++) { |
|
|
|
DefaultMutableTreeNode tmpChildTreeNode = |
|
|
|
DefaultMutableTreeNode tmpChildTreeNode = |
|
|
@ -198,9 +201,8 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
if (files == null) { |
|
|
|
if (files == null) { |
|
|
|
return new FileDirectoryNode[0]; |
|
|
|
return new FileDirectoryNode[0]; |
|
|
|
} |
|
|
|
} |
|
|
|
List fileNodeList = new ArrayList(); |
|
|
|
List<FileDirectoryNode> fileNodeList = new ArrayList<>(); |
|
|
|
for (int k = 0; k < files.length; k++) { |
|
|
|
for (File tmpFile : files) { |
|
|
|
File tmpFile = files[k]; |
|
|
|
|
|
|
|
// 文件属性为隐藏的话 不放入列表
|
|
|
|
// 文件属性为隐藏的话 不放入列表
|
|
|
|
if (tmpFile.isHidden()) { |
|
|
|
if (tmpFile.isHidden()) { |
|
|
|
continue; |
|
|
|
continue; |
|
|
@ -256,7 +258,7 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
// 得到本地tree图标
|
|
|
|
// 得到本地tree图标
|
|
|
|
Icon tmpIcon = view.getSystemIcon(currentFile); |
|
|
|
Icon tmpIcon = view.getSystemIcon(currentFile); |
|
|
|
if (currentFile.isDirectory() && fBuf.length() > 0) { |
|
|
|
if (currentFile.isDirectory() && fBuf.length() > 0) { |
|
|
|
tmpIcon = BaseUtils.readIcon("/com/fr/design/images/gui/folder.png"); |
|
|
|
tmpIcon = IOUtils.readIcon("/com/fr/design/images/gui/folder.png"); |
|
|
|
} |
|
|
|
} |
|
|
|
this.setIcon(tmpIcon); |
|
|
|
this.setIcon(tmpIcon); |
|
|
|
this.setName(null); |
|
|
|
this.setName(null); |
|
|
@ -299,6 +301,7 @@ public class JFileTree extends AbstractFileTree { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public int compare(FileDirectoryNode v1, FileDirectoryNode v2) { |
|
|
|
public int compare(FileDirectoryNode v1, FileDirectoryNode v2) { |
|
|
|
|
|
|
|
//noinspection Duplicates
|
|
|
|
if (v1.isDirectory()) { |
|
|
|
if (v1.isDirectory()) { |
|
|
|
if (v2.isDirectory()) { |
|
|
|
if (v2.isDirectory()) { |
|
|
|
return v1.getName().toLowerCase().compareTo(v2.getName().toLowerCase()); |
|
|
|
return v1.getName().toLowerCase().compareTo(v2.getName().toLowerCase()); |
|
|
|