使用JTree
時,可以設置DefaultMutableTreeNode
的「用戶對象」。這可以是任何形式的,但要顯示它,使用toString()
值。這不是我需要的。Java Swing:如何定義JTree如何顯示「用戶對象」?
如何更改用戶對象的顯示方式?
注:我的用戶對象有比一個String
不同的東西能夠保持樹和用戶對象之間的映射。
使用JTree
時,可以設置DefaultMutableTreeNode
的「用戶對象」。這可以是任何形式的,但要顯示它,使用toString()
值。這不是我需要的。Java Swing:如何定義JTree如何顯示「用戶對象」?
如何更改用戶對象的顯示方式?
注:我的用戶對象有比一個String
不同的東西能夠保持樹和用戶對象之間的映射。
我不明白什麼是你的問題。
DefaultMutableTreeNode
將在用戶對象上使用toString
方法,因爲它是有意義的。 JTree
需要字符串來繪製對象,以便向對象詢問其字符串rapresentation是否正確。
如果你真的需要避免調用你的對象toString
你將需要一種方式來反正提供的一個字符串rapresentation,但是你必須寫自己的MutableTreeNode
:
class MyTreeNode implements MutableTreeNode
{
UserObject yourObject;
MyTreeNode(UserObject yourObject)
{
this.yourObject = yourObject;
}
// implement all needed methods to handle children and so on
public String toString()
{
// then you can avoid using toString
return yourObject.sringRapresentation();
}
}
但我真不沒有看到這樣做的意義..此外,您可以嘗試通過重寫toString
方法來擴展DefaultMutableTreeNode
,但您需要對您的對象進行額外的引用,或者需要某些向下轉換。
如果您確實需要與字符串不同的可視化效果,您必須編寫自己的渲染實現TableCellRenderer
。
覆蓋的toString()用戶對象,或者提供一個,basic example
對於TreeCellRenderer爲+1。 – 2010-04-04 17:02:46
我會盡可能減少渲染器。 – 2010-04-04 17:08:44
另一種方法是,如果您只關心爲用戶對象顯示的文本,並且不想打擾TreeCellRender:使用您自己的代碼創建一個描述性字符串來擴展JTree並覆蓋convertValueToText。
這正是我的問題:我不知道在這種情況下,重寫'DefaultMutableTree'的'toString()'與重寫用戶對象的'toString()'是一樣的(順便說一句,一個外部API,所以我不能這樣做)。 – 2010-04-04 17:18:57
如果我有一個JTree包含活動對象,其中一個活動有一個標題和一個時間字段,我可能會在表中使用此對象,在單獨的列中顯示標題和時間,並在Jtree中使用它顯示標題時間..但是,如果我只有toString()方法重寫我不能滿足兩個... – dendini 2013-03-19 13:39:29