JTree добавляет узлы при запуске приложения
Я хочу создать текстовый редактор с файловым браузером, чтобы при запуске приложения я хотел, чтобы моя программа добавила узлы на JTree, чтобы он отображал все файлы и папки, например, в папке "Мои документы", и чтобы у меня была возможность доступа к этим файлам и папки (особенно в папки). Я попытался выяснить, как Эндрю Томпсон сделал это из этого примера, но мне не удалось. Мне удалось создать узлы для всех файлов и папок из "Мои документы", используя этот пример. Но это все, я не могу понять, как генерировать узлы для других файлов и папок при нажатии на один из узлов, представляющих папку.
Это то, что я сделал до сих пор:
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);
}
});
}
}
Может кто-нибудь сказать мне, как генерировать узлы для всех файлов и папок для конкретной папки. Заранее спасибо.
2 ответа
Я использую это FileTreeModel
для TreeModel
, Outline
для просмотра и user.dir
для начального каталога.
TreeModel treeModel = new FileTreeModel(
new File(System.getProperty("user.dir")));
OutlineModel outlineModel = DefaultOutlineModel.createOutlineModel(
treeModel, new FileRowModel(), true, "User Directory");
Создайте рекурсивную функцию, которая принимает корневой узел, добавляет узлы для каждого файла / каталога под ним, а затем снова вызывает себя на каждом из этих узлов.
Редактировать: нет необходимости наследовать от DefaultMutableTreeNode, если каждый узел уже содержит относительный путь.