2010-04-04 54 views

回答

6

我不明白什麼是你的問題。

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

+0

這正是我的問題:我不知道在這種情況下,重寫'DefaultMutableTree'的'toString()'與重寫用戶對象的'toString()'是一樣的(順便說一句,一個外部API,所以我不能這樣做)。 – 2010-04-04 17:18:57

+0

如果我有一個JTree包含活動對象,其中一個活動有一個標題和一個時間字段,我可能會在表中使用此對象,在單獨的列中顯示標題和時間,並在Jtree中使用它顯示標題時間..但是,如果我只有toString()方法重寫我不能滿足兩個... – dendini 2013-03-19 13:39:29

5

覆蓋的toString()用戶對象,或者提供一個,basic example

+1

對於TreeCellRenderer爲+1。 – 2010-04-04 17:02:46

+0

我會盡可能減少渲染器。 – 2010-04-04 17:08:44

0

另一種方法是,如果您只關心爲用戶對象顯示的文本,並且不想打擾TreeCellRender:使用您自己的代碼創建一個描述性字符串來擴展JTree並覆蓋convertValueToText

相關問題