次のSwingコントロールに対し、JClientノード・モデルを使用してコントロール・バインドを設定できます。
ノード・コントロール・バインドによって、ユーザーは、ビジネス・コンポーネント・データ・モデルに定義されているビュー・オブジェクトの関係から導出された、階層型の属性リストを表示できます。「model」プロパティ・エディタを使用して、選択したビュー・オブジェクト間の関係を、ノード・コントロール・バインドで扱う方法に関する一連の規則を定義します。ノード・コントロール・バインドで複数のブランチからなるツリーを構築するには、ビジネス・コンポーネント・データ・モデルに次のデータが必要です。
ツリーに対するコントロール・バインドを作成したら、ツリー・コントロールによって、ユーザーはバインドされたビュー・オブジェクトの行間をナビゲートできます。現時点ではツリー・コントロール用のナビゲーション・モデルはなく、かわりにコントロールにJUTreeDefaultMouseListenerを追加する必要があります。
ノード・コントロール・バインドを設定するには、次のようにします。
JTreeコントロールに対する「model」プロパティ・エディタを表示し、リストから「JClientノード・タイプ・バインド」を選択します。
ツリーのルート・ノードを定義するには、次のようにします。
「model」プロパティ・エディタで、「規則の編集」タブをクリックし、マスター・ビュー・オブジェクトから表示する親ノードの規則を定義します。ここでいうマスター・ビュー・オブジェクトとは、たとえば、ディテールがOrderビュー・オブジェクトであるようなマスターのCustomersビュー・オブジェクトなどです。
「ビュー・タイプの定義」リストから、ツリーのルート・ノードへの移入に使用するビュー・オブジェクトを選択します。これは、ルート・ノードを定義するマスター・ビュー・オブジェクトです。ここでいうマスター・ビュー・オブジェクトとは、たとえば、ディテールがOrderビュー・オブジェクトであるようなマスターのCustomersビュー・オブジェクトなどです。
「属性定義」リストから、ツリーの親ノードとして表示する属性を1つ選択します。たとえば、各顧客の苗字などです。現時点では、JTreeコントロールで各ブランチに表示できる属性は1つのみです。
「アクセッサ定義」リストから、マスター・ビュー・オブジェクトとツリーの最初のブランチ間のリンクを定義する、ビュー・リンク・アクセッサを選択します。たとえば、顧客ビュー・オブジェクトと注文ビュー・オブジェクトに対するアクセッサの場合、リストにはOrdersView
のように表示されます。
警告: 選択したビュー・オブジェクトに対するビュー・リンク・アクセッサがデータ・モデルに含まれていないと、「アクセッサ定義」リストには何も表示されません。ツリー内のリーフ(終端の)ノードを除くすべてのノードに対し、ビジネス・コンポーネント・データ・モデルにビュー・リンク・アクセッサを定義する必要があります。
「規則の追加」ボタンをクリックし、ルート・ノードに対する規則の定義を完了します。
「規則の表示」タブをクリックし、ルート・ノードの規則を表示します。たとえばCustomersとOrderの例の場合には、次のように表示されます。
ビュー・オブジェクトの規則: myPackage.CustomersView, CustLastName, OrderView
この規則は、ツリーのルート・ブランチのノードとしてCustLastName
属性を表示し、OrdersView
ビュー・リンク・アクセッサを使用してツリーの2番目のブランチとしてCustomersのOrderにドリルダウンして表示する、という意味です。次に、Orderビュー・オブジェクトから表示する属性を定義する規則を追加します。
ツリーのブランチを定義するには、次のようにします。
「規則の編集」タブをクリックし、最初のディテール・ビュー・オブジェクトから表示する子ブランチ属性の規則を定義します。
「ビュー・タイプの定義」リストから、ツリーのブランチ・ノードへの移入に使用するビュー・オブジェクトを選択します。これは、ツリーのノードを定義するディテール・ビュー・オブジェクトです。たとえばOrderディテール・ビュー・オブジェクトを指定し、そこから注文ID情報をツリーに表示します。
「属性定義」リストから、ツリーのブランチ・ノードとして表示する属性を1つ選択します。たとえばOrderディテール・ビュー・オブジェクトを指定し、そこから注文ID情報をツリーに表示します。
「アクセッサ定義」リストから、ツリーの最初のブランチ・ビュー・オブジェクトと2番目のブランチのリンクを定義する、ビュー・リンク・アクセッサを選択します。たとえば、Orderビュー・オブジェクトとOrderItemビュー・オブジェクトに対するアクセッサの場合、リストにはOrderItemsView
のように表示されます。
注意: 選択したブランチ・ビュー・オブジェクトに対してビジネス・コンポーネント・データ・モデルにそれ以上アクセッサが定義されていない場合、リストには<なし>
と表示されます。これはアクセッサが必要でないことを意味し、選択したビュー・オブジェクトの属性がツリーのリーフ・ノードとして表示されます。
「規則の追加」ボタンをクリックし、子ブランチ・ノードに対する規則の定義を完了します。
「規則の表示」タブをクリックし、ルート・ノードの規則を表示します。たとえばCustomersとOrderの例の場合には、次のように表示されます。
ビュー・オブジェクトの規則: myPackage.OrdersView, OrderId, <none>
この規則は、ツリーの2番目のブランチのノードとしてOrderId
属性を表示する、という意味です。最後のnone
は、このブランチはリーフ・ノードで構成されるため、アクセッサがないことを表しています。
ブランチ間を移動するためのアクセッサがデータ・モデルにあれば、「規則の編集」タブで同じ手順を繰り返して新規のブランチをいくつでも定義できます。
「OK」をクリックし、プロパティ設定を保存します。
モデル・エディタによって、定義した規則にエラーがないかがチェックされます。表示されるエラー・メッセージは次のとおりです。
JDeveloperによってクラス・ファイルに次のようなコードが追加され、JTreeコントロールがビュー・オブジェクトとその属性にバインドされます。
myJTree.setModel(JUTreeBinding.createTreeNodeTypeBinding(getPanelBinding(),
myJTree, "MyRootNodeViewObject", null, "MyRootNodeVOTreeIter",
new JUCtrlHierTypeBinding[] {new JUTreeAccessorTypeBinding("NodeType1",
"mypackage.MyRootViewObject", "MyRootNodeAttribute",
"MyLeafNodeViewObject", null, null, null), new JUTreeAccessorTypeBinding("NodeType2",
"mypackage.MyLeafNodeViewObject", "MyLeafNodeAttribute",
null, null, null, null)}));
表示するイメージをノードのプロパティ・エディタで追加するには、次のようにします。
ノード・モデル・エディタでは、ブランチ内の各ノードに表示するアイコンと、各ブランチの開くアイコンおよび閉じるアイコンを選択できます。ノード・モデル・エディタにアイコンを追加するには、初期化されたイメージを変数宣言に追加する必要があります。次に例を示します。
ImageIcon deptImage = new ImageIcon();
ImageIcon deptOpenImage = new ImageIcon();
ImageIcon deptClosedImage = new ImageIcon();
ImageIcon empImage = new ImageIcon();
ImageIcon empOpenImage = new ImageIcon();
ImageIcon empClosedImage = new ImageIcon();
イメージは初期化しておく必要があります。初期化していない場合、コードでパラメータ・リストを編集した後でノード・モデル・エディタを開くとコード側の編集内容は失われます。イメージが初期化されていない場合、nullイメージを表示するノードの描画が試行され、SwingランタイムによってNullPointerExceptionがスローされます。