当前位置: 首页 > 面试题库 >

JTree在应用程序启动时添加节点

汪耀
2023-03-14
问题内容

我想使用文件浏览器创建文本编辑器,所以当我启动应用程序时,我想在程序中在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);
            }
        });
    }

}

有人可以告诉我如何为特定文件夹的所有文件和文件夹生成节点。提前致谢。


问题答案:

我将此FileTreeModel用于TreeModelOutline视图和user.dir起始目录。

TreeModel treeModel = new FileTreeModel(
    new File(System.getProperty("user.dir")));
OutlineModel outlineModel = DefaultOutlineModel.createOutlineModel(
    treeModel, new FileRowModel(), true, "User Directory");


 类似资料:
  • 编辑:根据Jim Rush的建议,我现在使用rc.local而不是init.d direclty来运行永远启动启动。 你知道为什么这不起作用吗?我在覆盆子皮B+上运行覆盆子。我已经运行了/etc/init.d kuuyi start和forever kicks并启动了该应用程序。只是启动机器后就不会发生了。 在这方面的任何帮助都是非常感谢的,我在这方面就像乳制品日后的旧奶酪布一样筋疲力尽。

  • 我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与

  • 目前,我正在收听使用spring boot和spring amqp通过API调用创建的新队列。这是一段成功运行的代码 但如果应用程序再次启动,我需要在容器(DirectMessageListenerContainer)中注册队列,并在应用程序启动时将队列添加到侦听器容器id“queueContainer”中。 我无法侦听队列列表并在启动时将其添加到listner容器。在这方面你能帮忙吗

  • 这是我的第一个问题。我一路寻找,尝试了很多,但没有得到我想做的。问题是:我有一个应用程序使用SoundPool播放声音,仅此而已。但是要加载的东西很多(>50),一个一个加载需要时间。看一看; @Override公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View V

  • 问题内容: 我有一个Java应用程序。 该应用程序具有一个设置,该设置决定该应用程序是否在启动时启动。 目前,我可以通过在“启动项目”文件夹中放置/删除快捷方式来实现此目的。 但是,我想知道是否有更好的方法来处理此行为。 编辑 是的,它是Windows。抱歉,之前没有清除该内容。 该应用程序具有一个用户可以在其中触发动作的UI,并且该应用程序在运行时会定期在后台运行一些任务。 @Peter,如何在

  • 我使用XML配置将spring-integration通道连接到服务激活器。我已将一个sftp入站通道适配器附加到同一通道。这很管用。 我希望允许客户机通过web界面向通道添加/删除SFTP入站通道适配器,但是实例化spring-integration组件似乎与XML Spring上下文紧密耦合(请参见org.springframework.integration.SFTP.config.sftP