クラス
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 つのプロパティー userObject
と CSSclass
に対するサポートがあります。userObject
プロパティーは、例にある食べ物、色、およびスポーツの名前を返します。CSSclass
プロパティーは、項目のタイプ、すなわち、food
、color,
または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]; }