2009-10-06 60 views
0

是否可以将String变量转换为DefaultMutableTreeNode对象? 请解释。 上下文:字符串变量为DefaultMutableTreeNode对象吗?

String s = new String(outputTagName); 
Object s2 = (Object) s; 
DefaultMutableTreeNode selectedNode2 =(DefaultMutableTreeNode) s2; 
DefaultMutableTreeNode parent2 =(DefaultMutableTreeNode) parent; 
model.insertNodeInto(selectedNode2, parent2, parent2.getChildCount()); 

这是我写的代码。这用在以BreadthFirstSearch方式遍历树的枚举中。 而2NF行给了我这个错误:

java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.tree.DefaultMutableTreeNode at .... 

回答

0

您不能将String对象转换为除String或Object之外的任何类型,或者其中一个接口String implements(Serializable,CharSequence,Comparable)。要将对象投射到某种类型,对象必须是这种类型。 String对象的类型是String,而不是DefaultMutableTreeNode类型。你甚至不能使DefaultMutableTreeNode成为String的子类(在这种情况下可以进行转换),因为String类是final的。

+0

我可以将字符串转换为对象类型,然后将对象转换为DefaultMutableTreeNode类型吗? – fixxxer 2009-10-06 10:23:53

+0

一个字符串总是一个对象,但一个对象并不总是一个DefaultMutableTreeNode – Nettogrof 2009-10-06 10:38:43

+0

@Nettogrof你对这条评论下面的ANSWER有什么看法? – fixxxer 2009-10-06 10:57:35

1

这取决于你希望使用与节点树的语义完全

例如,您可以创建一个包含字符串作为简单地作为一个节点:

String s = ...; // your string 
new DefaultMutableTreeNode(s); 

至于这是否会是任何对你有用取决于你如何使用树。

基本上,更多内容请。否则,这个简单的“是”的答案是最好的你会得到。 :-p

+0

你说这里的语义是什么? 我可以有更多的是,可以吗? :P – fixxxer 2009-10-06 10:13:42

+0

@fixxxer:我的意思是,你的问题所指的“转换”过程取决于你想要的结果节点的属性 - 这取决于你如何使用它。所以我的答案会创建一个包装给定String的节点,但如果其他节点包含'Booleans'或'Files'或'MyCustomRunnableImpl'(通过字符串ID查找),这对您没有任何好处。基本上,我写的东西在很多情况下都可以工作,你的问题可以描述,而且可以描述更多的失败。 – 2009-10-06 14:03:17

+0

根据我的经验,我一直无法将字符串对象转换为DefaultMutableTreeMode,因为程序抛出错误(我在Elcipse IDE中运行它)。所以我使用setUserObject方法将字符串附加到节点。但这只是一个暂时的解决办法,就我而言。 – fixxxer 2009-10-08 07:32:43

0

Link that you have provide in your other question

你可以看到,你可以做新的DefaultMutableTreeNode( “任何字符串”);

要更正您的代码示例,做到这一点的方法是:

String s = new String(outputTagName); 

DefaultMutableTreeNode selectedNode2 = new DefaultMutableTreeNode(s2); 
1

纠正我,如果我错了,但似乎要更改选定节点的显示文本到一些新的给定的文本。如果是这种情况,我认为这可能有帮助。

DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); 
node.setUserObject("New Node Text"); 
相关问题