Swing/DirectoryTree のバックアップソース(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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に表示する #navi(../) RIGHT:Posted by &author(aterai); at 2011-07-04 *FileSystemViewを使ってディテクトリ構造をJTreeに表示する [#k90648c1] FileSystemViewを使ってディテクトリ構造をJTree上に表示します。主に[http://stackoverflow.com/questions/6182110/file-browser-gui java - File Browser GUI - Stack Overflow]を参考にしています。 //-&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh3.googleusercontent.com/-FkX-8X4KxDo/ThFoeY8M64I/AAAAAAAAA-Y/Ry_RA9yVCxc/s800/DirectoryTree.png) **サンプルコード [#kd226fda] #code{{ 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(); } } }} **解説 [#e6464a40] このサンプルでは、[http://stackoverflow.com/questions/6182110/file-browser-gui java - File Browser GUI - Stack Overflow]のディレクトリ表示部分を抜き出して、ルートパーティション(Windows の場合、Desktop フォルダ)をルートノードにしてJTreeで表示しています。 ---- クリックされたノードがディレクトリだった場合、子ファイルの検索とJTreeへのそれらの追加がSwingWorkerを使って別々のスレッドで行われます。 **参考リンク [#g062d7c1] - [http://docs.oracle.com/javase/jp/6/api/javax/swing/filechooser/FileSystemView.html FileSystemView (Java Platform SE 6)] - [http://stackoverflow.com/questions/6182110/file-browser-gui java - File Browser GUI - Stack Overflow] - [http://www.pushing-pixels.org/2007/07/22/showing-the-file-system-as-a-swing-jtree.html Showing the file system as a Swing JTree ・ Pushing Pixels] **コメント [#j26d644a] #comment