を使用する場合はJTree
、の「ユーザーオブジェクト」をDefaultMutableTreeNode
設定できます。これはどのような種類でもかまいませんが、表示するにはそのtoString()
値が使用されます。これは私が必要としているものではありません。
ユーザーオブジェクトの表示方法を変更するにはどうすればよいですか?
注:ツリーとユーザーオブジェクト間のマッピングを維持できるようにするには、ユーザーオブジェクトはとは異なるものである必要があります。String
を使用する場合はJTree
、の「ユーザーオブジェクト」をDefaultMutableTreeNode
設定できます。これはどのような種類でもかまいませんが、表示するにはそのtoString()
値が使用されます。これは私が必要としているものではありません。
ユーザーオブジェクトの表示方法を変更するにはどうすればよいですか?
注:ツリーとユーザーオブジェクト間のマッピングを維持できるようにするには、ユーザーオブジェクトはとは異なるものである必要があります。String
何が問題なのかわかりません。
理にかなっているので、はユーザーオブジェクトのメソッドをDefaultMutableTreeNode
使用します。toString
オブジェクトを描画するJTree
には文字列が必要なので、オブジェクトに文字列の表現を要求しても問題ありません。
オブジェクトの呼び出しを本当に避ける必要がtoString
ある場合は、とにかくオブジェクトの文字列表現を提供する方法が必要になりますが、独自に作成する必要があります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();
}
}
しかし、私はこれを行う意味が本当にわかりません。さらにDefaultMutableTreeNode
、オーバーライドtoString
メソッドによって拡張を試すことができますが、オブジェクトへの追加の参照が必要になるか、いくつかのダウンキャストが必要になります。
文字列とは異なる視覚化が本当に必要な場合は、を実装する独自のレンダリングを作成する必要がありますTableCellRenderer
。
ユーザーオブジェクトのtoString()をオーバーライドするか、TreeCellRendererを提供します。基本的な例です。
ユーザーオブジェクトに表示されるテキストだけを気にし、TreeCellRenderを気にしたくない場合は、別の方法として、JTreeを拡張し、そのオブジェクトの説明文字列を作成する独自のコードでconvertValueToTextをオーバーライドします。