1

我有以下代码

TreePath tp = jTree.getSelectionPath();
String path = tp.getPath().toString();

这会将路径设置为Ljava.lang.Object;@33530691,我理解这是因为

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' +Integer.toHexString(hashCode())

但是,您实际上如何将这个值作为字符串来获取呢?

4

9 回答 9

1

getPath() 返回一个字符串值数组,表示树中的组件。如果您需要根的字符串表示,您将执行 getPath()[0];

于 2012-08-31T09:57:34.243 回答
0

如果它仅用于输出/记录,我想Arrays.asList(tp.getPath()).toString()就足够了。

于 2012-08-31T10:05:19.077 回答
0

String 的 toString()方法是默认重载的,所以问题不在于 String 路径,而是尝试查看TreePath tp.

我觉得你需要看看tp

于 2012-08-31T09:57:36.163 回答
0

我不太明白你的问题。您发布的报价中不是已经回答了吗?

getClass().getName() + '@' +Integer.toHexString(hashCode())toString()方法的默认实现,但如果您需要更好的表示形式,您可以覆盖它(请记住,您需要TreePath在您的情况下进行扩展)。

编辑:我想,我现在明白了:

由于TreePath.getPath()返回一个对象数组,您可以java.lang.Object在输出中得到它。

于 2012-08-31T09:58:40.517 回答
0

作为树组件的对象需要重写其 toString() 方法。您可以用它返回的任何内容覆盖它。我假设您正在向树中添加一个自定义对象,因此您可以控制该对象及其 toString() 方法

于 2012-08-31T09:59:25.950 回答
0

如果你想得到一个逗号分隔的值字符串,你可以做

字符串路径 = new ArrayList(tp.getPath()).toString();

于 2012-08-31T10:01:58.890 回答
0

尝试这样的事情:

Object[] treeNodes = tp.getPath();
StringBuilder sb = new StringBuilder();
for(Object tn : treeNodes) {
    sb.append(File.separatorChar).append(tn.toString());
}
String path = sb.toString();
于 2012-08-31T10:02:16.813 回答
0

你有一个对象数组(可能都是字符串)

对于toString这些,您需要使用 Arrays.toString()

String path = Arrays.toString(tp.getPath());
于 2012-08-31T10:03:53.100 回答
0

TreePath对象表示从根节点到实际节点的整个路径。如果你调用getPath它,它会返回一个数组,其中包含根节点和实际选择的节点,以及它们之间的所有节点。

如何获得“正确的字符串”取决于您实际想要实现的目标:

  • 如果您想要实际选定节点的字符串表示,请使用该getLastPathComponent方法

    TreePath tp = jTree.getSelectionPath();
    String path = tp.getLastPathComponent().toString();
    
  • 如果你想拥有完整的路径,你将不得不遍历数组

    TreePath tp = jTree.getSelectionPath();
    StringBuilder pathBuilder = new StringBuilder();
    for( Object node : tp.getPath() ){
      pathBuilder.append( node.toString() );
      //possibly append a separator as well
    }
    String path = pathBuilder.toString();
    

    或者简单地使用Arrays#toString方法tp.getPath()而不是toString方法

于 2012-08-31T10:06:14.927 回答