TreeSDMNode クラス

クラス TreeSDMNode は、グラフのノードを表します。 以下のコード例にその定義を示します。
public class TreeSDMNode implements IlvSDMNode
{

保管されるデータ

グラフの各ノード (グラフィック・オブジェクト) には、ツリー内の対応するノード (モデル・オブジェクト) への参照があります。 親ノード (グラフィック・オブジェクト) とツリー・モデルへの参照も必要です。 ノードの子は、ベクトルに保管されます。
データの追跡: 現行ノード、親、子、およびモデル
private TreeSDMNode parent;
private TreeModel treeModel;
private Object treeNode;
private Vector children;

public TreeSDMNode(TreeModel treeModel, TreeSDMNode parent, Object treeNode)
{
  this.parent = parent;
  this.treeModel = treeModel;
  this.treeNode = treeNode;
  
  createChildren();
 }

子のベクトル

コンストラクターがメソッド createChildren を呼び出すことに注意してください。 このメソッドは、ツリー・モデルを全探索し、ツリー内の各項目に TreeSDMNode インスタンスを作成します。 さらに、TreeSDMLink のインスタンスを作成して、親ノードとそれぞれの子ノード間のリンクを描画します。
子ノードとリンクの作成 (グラフィック・オブジェクト)
private void createChildren()
{
  children = new Vector();
  
  // scan all the children of the root tree node, and create
  // a TreeSDMNode for each:
  //
  int count = treeModel.getChildCount(treeNode);
  for(int i = 0; i < count; i++){
    Object childTreeNode = treeModel.getChild(treeNode, i);
    
    // Create the TreeSDMNode. Note that this will recursively create
    // the SDM nodes for all sub-nodes.
    //
    TreeSDMNode childSDMNode = new TreeSDMNode(treeModel, this, childTreeNode);
    children.addElement(childSDMNode);
    
    // Create a parent/child link:
    //
    TreeSDMLink childSDMLink = new TreeSDMLink(this, childSDMNode);
    children.addElement(childSDMLink);
  }
}

IlvSDMNode インターフェースの実装

以下のメソッドは、 IlvSDMNode インターフェースに属するメソッドの実装です。これらのメソッドは TreeSDMNode に継承されます。
getTag メソッドは、ノードのタイプ (または「タグ」) を返します。 この例では、タイプは treenode です。
ノード・タイプの取得: getTag メソッド
  public String getTag()

  {
    return "treenode";
  }
getID メソッドは、ノードの ID を返します。 ノードの ID は、そのハッシュ・コードです。
ノード ID の取得: getID メソッド
  public String getID()
{
    return String.valueOf(hashCode());
  }
getChildren メソッドは、children データ・メンバーに保管されている、ノードの子を返します。
子オブジェクトの取得: getChildren メソッド
public Enumeration getChildren()

  {
    return children.elements();
  }
getParent メソッドは、現行ノードの親ノードを返します。
親オブジェクトの取得: getParent メソッド
  public IlvSDMNode getParent()
  {
    return parent;
  }
ダイアグラム・コンポーネントがノードのプロパティーにアクセスできるようにするには、getProperty および getPropertyNames メソッドを実装する必要があります。 この例では、2 つのプロパティー userObjectCSSclass に対するサポートがあります。
  • userObject プロパティーは、例にある食べ物、色、およびスポーツの名前を返します。
  • CSSclass プロパティーは、項目のタイプ、すなわち、 foodcolor, または sport を返します。
プロパティーの取得: getProperty メソッド
  public Object getProperty(String property)
  {
    if(treeNode instanceof DefaultMutableTreeNode){
      if(property.equals("userObject")){
        return ((DefaultMutableTreeNode)treeNode).getUserObject();
      }
      if(property.equals("CSSclass") && ((DefaultMutableTreeNode)treeNode).getParent() != null){
        return ((DefaultMutableTreeNode)((DefaultMutableTreeNode)treeNode).getParent()).getUserObject();
      }
    }
    return null;
  }
getPropertyNames メソッドは 2 つのプロパティー名を取得します。
プロパティー名の取得: getPropertyNames メソッド
  public String[] getPropertyNames()
  {
    if(treeNode instanceof DefaultMutableTreeNode)
      return new String[] { "userObject", "CSSclass" };
    else
      return new String[0];
  }