4

ファイル ブラウザを備えたテキスト エディタを作成したいので、アプリケーションを起動するときにプログラムで JTree にノードを追加して、たとえば My Documents フォルダ内のすべてのファイルとフォルダを表示し、それらのファイルにアクセスできるようにします。フォルダー (特にフォルダー)。アンドリュー・トンプソンがこの例からそれをどのように行ったかを理解しようとしました が、失敗しました. この例を使用して、My Documents からすべてのファイルとフォルダーのノードを作成することができました 。しかし、それだけです。フォルダーを表すノードの1つをクリックすると、他のファイルやフォルダーのノードを生成する方法がわかりません。

これは私が今までやってきたことです:

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;


public class MyTextEditor extends JFrame{

    JTree tree;
    JTabbedPane tabbedPane = new JTabbedPane();
    File myDocumentsFolder = new File("C:/Documents and Settings/User/My Documents");
    File[] listOfFiles = myDocumentsFolder.listFiles();
    String dirTitle = myDocumentsFolder.getName();
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(dirTitle);
    DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);

    public MyTextEditor() {

        tree = new JTree(treeModel);
        tree.setEditable(false);
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.setShowsRootHandles(true);

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JScrollPane(tree),tabbedPane);
        add(splitPane);

        tree.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e){
                for (int i = 0; i < listOfFiles.length; i++) {
                    String nameOfFile = listOfFiles[i].getName();
                    rootNode.add(new DefaultMutableTreeNode(nameOfFile));
                }
            }
        });

    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                MyTextEditor mte = new MyTextEditor();
                mte.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                mte.setPreferredSize(new Dimension(800,600));
                mte.pack();
                mte.setLocationByPlatform(true);
                mte.setVisible(true);
            }
        });
    }

}

特定のフォルダーのすべてのファイルとフォルダーのノードを生成する方法を教えてください。前もって感謝します。

4

2 に答える 2

4

これFileTreeModelTreeModelOutlineビュー、およびuser.dir開始ディレクトリに使用します。

TreeModel treeModel = new FileTreeModel(
    new File(System.getProperty("user.dir")));
OutlineModel outlineModel = DefaultOutlineModel.createOutlineModel(
    treeModel, new FileRowModel(), true, "User Directory");
于 2012-11-06T20:12:51.480 に答える
3

ルート ノードを受け取り、その下の各ファイル/ディレクトリにノードを追加し、それらの各ノードで自分自身を再度呼び出す再帰関数を作成します。

編集: 各ノードに既に相対パスが含まれている場合、DefaultMutableTreeNode から継承する必要はありません。

于 2012-11-06T19:52:38.007 に答える