Swing/DirectoryTree のバックアップの現在との差分(No.4)
TITLE:FileSystemViewを使ってディレクトリ構造をJTreeに表示する
Posted by aterai at 2011-07-04
FileSystemViewを使ってディレクトリ構造をJTreeに表示する
FileSystemViewを使ってディレクトリ構造をJTree上に表示します。主にjava - File Browser GUI - Stack Overflowを参考にしています。- category: swing folder: DirectoryTree title: FileSystemViewを使ってディレクトリ構造をJTreeに表示する tags: [JTree, File, FileSystemView, SwingWorker] author: aterai pubdate: 2011-07-04T16:26:25+09:00 description: FileSystemViewを使ってディレクトリ構造をJTree上に表示します。 image:
概要
FileSystemView
を使ってディレクトリ構造をJTree
上に表示します。主にjava - File Browser GUI - Stack Overflowを参考にしています。
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
class FolderSelectionListener implements TreeSelectionListener{
#spanend
#spanadd
class FolderSelectionListener implements TreeSelectionListener {
#spanend
private final FileSystemView fileSystemView;
public FolderSelectionListener(FileSystemView fileSystemView) {
this.fileSystemView = fileSystemView;
}
#spanadd
#spanend
@Override public void valueChanged(TreeSelectionEvent e) {
final JTree tree = (JTree)e.getSource();
final DefaultMutableTreeNode node =
(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
final DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
//final TreePath path = e.getPath();
JTree tree = (JTree) e.getSource();
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) e.getPath().getLastPathComponent();
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
// TreePath path = e.getPath();
if(!node.isLeaf()) return;
final File parent = (File)node.getUserObject();
if(!parent.isDirectory()) return;
if (!node.isLeaf()) return;
File parent = (File) node.getUserObject();
if (!parent.isDirectory()) return;
SwingWorker<String, File> worker = new SwingWorker<String, File>() {
@Override public String doInBackground() {
File[] children = fileSystemView.getFiles(parent, true);
for(File child: children) {
if(child.isDirectory()) {
for (File child: children) {
if (child.isDirectory()) {
publish(child);
}
}
return "done";
}
@Override protected void process(java.util.List<File> chunks) {
for(File file: chunks) {
#spanadd
#spanend
@Override protected void process(List<File> chunks) {
for (File file: chunks) {
node.add(new DefaultMutableTreeNode(file));
}
model.nodeStructureChanged(node);
//tree.expandPath(path);
// tree.expandPath(path);
}
};
worker.execute();
}
}
View in GitHub: Java, Kotlin解説
このサンプルでは、java - File Browser GUI - Stack Overflowのディレクトリ表示部分を抜き出して、ルートパーティション(Windows の場合、Desktop フォルダ)をルートノードにしてJTreeで表示しています。- - クリックされたノードがディレクトリだった場合、子ファイルの検索とJTreeへのそれらの追加がSwingWorkerを使って別々のスレッドで行われます。
解説
このサンプルでは、java - File Browser GUI - Stack Overflowのディレクトリ表示部分を参考にルートパーティション(Windows
の場合Desktop
フォルダ)をルートノードにしてJTree
で表示しています。
参考リンク
- FileSystemView (Java Platform SE 6)
- java - File Browser GUI - Stack Overflow
- クリックされたノードがディレクトリの場合、子ファイルの検索と
JTree
へのそれらの追加をSwingWorker
を使用して別スレッドで実行するよう変更
参考リンク
- FileSystemView (Java Platform SE 8)
- java - File Browser GUI - Stack Overflow
- Showing the file system as a Swing JTree ・ Pushing Pixels