4

を使用する場合はJTree、の「ユーザーオブジェクト」をDefaultMutableTreeNode設定できます。これはどのような種類でもかまいませんが、表示するにはそのtoString()値が使用されます。これは私が必要としているものではありません。

ユーザーオブジェクトの表示方法を変更するにはどうすればよいですか?

注:ツリーとユーザーオブジェクト間のマッピングを維持できるようにするには、ユーザーオブジェクトとは異なるものである必要があります。String

4

3 に答える 3

6

何が問題なのかわかりません。

理にかなっているので、はユーザーオブジェクトのメソッドを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

于 2010-04-04T17:04:15.443 に答える
5

ユーザーオブジェクトのtoString()をオーバーライドするか、TreeCellRendererを提供します。基本的な例です。

于 2010-04-04T17:00:20.557 に答える
0

ユーザーオブジェクトに表示されるテキストだけを気にし、TreeCellRenderを気にしたくない場合は、別の方法として、JTreeを拡張し、そのオブジェクトの説明文字列を作成する独自のコードでconvertValueToTextをオーバーライドします。

于 2013-04-22T20:45:03.127 に答える