我有以下代码
TreePath tp = jTree.getSelectionPath();
String path = tp.getPath().toString();
这会将路径设置为Ljava.lang.Object;@33530691
,我理解这是因为
Object类的toString方法返回一个由。组成的字符串 对象是实例的类的名称,at-sign 字符“@”,以及散列的无符号十六进制表示 对象的代码。换句话说,此方法返回一个相等的字符串 价值:
getClass()。getName()+'@'+ Integer.toHexString(hashCode())
但是你怎么把这个值当作String?
答案 0 :(得分:1)
getPath()返回表示树中组件的String值数组。如果需要root的String表示,则执行getPath()[0];
答案 1 :(得分:0)
字符串的 toString()
方法是 defalut重载,因此问题不在于字符串路径,而是尝试查看TreePath tp.
我认为您需要查看tp
。
答案 2 :(得分:0)
我不太明白你的问题。在您发布的报价中是否已经回答了这个问题?
getClass().getName() + '@' +Integer.toHexString(hashCode())
toString()
方法的默认实现,但您可以覆盖它,如果您需要更好的表示(请记住,您需要在您的情况下扩展TreePath
)
编辑:我想,我现在明白了:
由于TreePath.getPath()
返回一个对象数组,因此输出中会得到java.lang.Object
。
答案 3 :(得分:0)
作为树组件的对象需要覆盖其toString()方法。您可以使用它返回的任何内容覆盖它。我假设您正在向树中添加自定义对象,以便您控制该对象及其toString()方法
答案 4 :(得分:0)
如果你想得到一个逗号分隔的值,你可以做
String path = new ArrayList(tp.getPath())。toString();
答案 5 :(得分:0)
尝试这样的事情:
Object[] treeNodes = tp.getPath();
StringBuilder sb = new StringBuilder();
for(Object tn : treeNodes) {
sb.append(File.separatorChar).append(tn.toString());
}
String path = sb.toString();
答案 6 :(得分:0)
你有一个对象数组(可能都是字符串)
要toString
这些,您需要使用Arrays.toString()
String path = Arrays.toString(tp.getPath());
答案 7 :(得分:0)
如果仅用于输出/记录,我猜Arrays.asList(tp.getPath()).toString()
就足够了。
答案 8 :(得分: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();
或仅使用tp.getPath()
上的Arrays#toString
方法代替toString
方法