JTree:如何获取所有项目的文本?

str*_*nko 5 java swing text jtree

我想以格式获取JTree的文本:

root
  sudir1
    node1
    node2
  subdir2
    node3
    node4
Run Code Online (Sandbox Code Playgroud)

可能吗?

我写了一些代码

public static String getLastSelectedText(JTree tree) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    if (node == null) return null;
    return node.getUserObject().toString();
}
Run Code Online (Sandbox Code Playgroud)

但它只获得选定的组件文本.

我想扩展树和处理所有节点,但也许这是个坏主意.

How*_*ard 8

我认为你不应该在一个函数中构建字符串 - 但我不知道你的问题到底是什么.

为了使我的答案尽可能接近您建议的功能,您可以尝试这样的事情:

TreeModel model = tree.getModel();
System.out.println(getTreeText(model, model.getRoot(), ""));
Run Code Online (Sandbox Code Playgroud)

具有递归功能 getTreeText

private static String getTreeText(TreeModel model, Object object, String indent) {
    String myRow = indent + object + "\n";
    for (int i = 0; i < model.getChildCount(object); i++) {
        myRow += getTreeText(model, model.getChild(object, i), indent + "  ");
    }
    return myRow;
}
Run Code Online (Sandbox Code Playgroud)

getTreeText 有三个论点

  • model:我们请求树节点的模型
  • object:我们要求字符串表示的对象(包括所有子项)
  • indent:缩进级别