Swing/DirectoryTree のバックアップ(No.22)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DirectoryTree へ行く。
- 1 (2011-07-04 (月) 16:26:25)
- 2 (2011-07-06 (水) 19:53:48)
- 3 (2012-05-16 (水) 15:14:04)
- 4 (2012-12-19 (水) 22:15:07)
- 5 (2013-09-20 (金) 04:31:02)
- 6 (2014-11-16 (日) 04:57:15)
- 7 (2015-12-12 (土) 02:26:25)
- 8 (2016-06-03 (金) 13:36:37)
- 9 (2017-04-07 (金) 13:51:51)
- 10 (2017-09-08 (金) 19:14:53)
- 11 (2019-02-20 (水) 15:37:48)
- 12 (2020-12-09 (水) 01:31:21)
- 13 (2023-02-25 (土) 21:29:53)
- 14 (2025-01-03 (金) 08:57:02)
- 15 (2025-01-03 (金) 09:01:23)
- 16 (2025-01-03 (金) 09:02:38)
- 17 (2025-01-03 (金) 09:03:21)
- 18 (2025-01-03 (金) 09:04:02)
- 19 (2025-05-28 (水) 12:14:26)
- 20 (2025-06-09 (月) 00:51:02)
- 21 (2025-06-19 (木) 12:41:37)
- 22 (2025-06-19 (木) 12:43:47)
- 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:
Summary
FileSystemView
を使ってディレクトリ構造をJTree
上に表示します。主にjava - File Browser GUI - Stack Overflowを参考にしています。
Screenshot

Advertisement
Source Code Examples
class FolderSelectionListener implements TreeSelectionListener {
private final FileSystemView fileSystemView;
protected FolderSelectionListener(FileSystemView fileSystemView) {
this.fileSystemView = fileSystemView;
}
@Override public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) e.getPath().getLastPathComponent();
File parent = (File) node.getUserObject();
// Java 9:
// // https://ateraimemo.com/Swing/ResolveShortcutsLinkLocation.html
// if (fileSystemView.isLink(parent)) {
// try {
// parent = fileSystemView.getLinkLocation(parent);
// } catch (FileNotFoundException ex) {
// return;
// }
// }
if (!node.isLeaf() || !parent.isDirectory()) {
return;
}
JTree tree = (JTree) e.getSource();
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
new BackgroundTask(fileSystemView, parent) {
@Override protected void process(List<File> chunks) {
if (tree.isDisplayable() && !isCancelled()) {
chunks.stream().map(DefaultMutableTreeNode::new)
.forEach(child -> model.insertNodeInto(
child, node, node.getChildCount()));
} else {
cancel(true);
}
}
}.execute();
}
}
View in GitHub: Java, KotlinDescription
このサンプルでは、java - File Browser GUI - Stack Overflowのディレクトリ表示部分を参考にルートパーティション(Windows
の場合Desktop
フォルダ)をルートノードにしてJTree
で表示しています。
- クリックされたノードがディレクトリの場合、子ファイルの検索と
JTree
へのそれらの追加をSwingWorker
を使用して別スレッドで実行するよう変更
Reference
- FileSystemView (Java Platform SE 8)
- java - File Browser GUI - Stack Overflow
- Showing the file system as a Swing JTree ・ Pushing Pixels
- JTreeで表示したフォルダ構造でWindowsのlnkショートカット先に移動する