Swing/DirectoryTree のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
- title: FileSystemViewを使ってディレクトリ構造をJTreeに表示する tags: [JTree, File, FileSystemView, SwingWorker] author: aterai pubdate: 2011-07-04T16:26:25+09:00 description: FileSystemViewを使ってディレクトリ構造をJTree上に表示します。
概要
FileSystemView
を使ってディレクトリ構造をJTree
上に表示します。主にjava - File Browser GUI - Stack Overflowを参考にしています。
Screenshot
Advertisement
サンプルコード
class FolderSelectionListener implements TreeSelectionListener{
private final FileSystemView fileSystemView;
public FolderSelectionListener(FileSystemView fileSystemView) {
this.fileSystemView = fileSystemView;
}
@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();
if(!node.isLeaf()) return;
final 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()) {
publish(child);
}
}
return "done";
}
@Override protected void process(java.util.List<File> chunks) {
for(File file: chunks) {
node.add(new DefaultMutableTreeNode(file));
}
model.nodeStructureChanged(node);
//tree.expandPath(path);
}
};
worker.execute();
}
}
View in GitHub: Java, Kotlin解説
このサンプルでは、java - File Browser GUI - Stack Overflowのディレクトリ表示部分を抜き出して、ルートパーティション(Windows
の場合、Desktop
フォルダ)をルートノードにしてJTree
で表示しています。
クリックされたノードがディレクトリだった場合、子ファイルの検索とJTree
へのそれらの追加がSwingWorker
を使って別々のスレッドで行われます。
参考リンク
- FileSystemView (Java Platform SE 6)
- java - File Browser GUI - Stack Overflow
- Showing the file system as a Swing JTree ・ Pushing Pixels