ADFツリー・バインディングのカスタマイズ

データ・コントロール・パレットから挿入する次のUIコントロールに、ADF階層ツリー・バインディングを設定できます。

ツリー・バインディングにより、ユーザーは、「モデル」プロジェクトでビジネス・サービスにより指定されているように、マスター/ディテール関係から導出される属性の階層リストを表示できます。ツリー・バインディング・エディタを使用して、選択したビジネス・サービス・データ・コレクション間の関係を、ツリー・バインディングで扱う方法に関する一連の規則を定義します。

ツリー・バインディングで複数のブランチからなるツリーを構築するには、ビジネス・サービスに次のデータが必要です。

ツリー・コントロールに対するADFバインディングを作成後、ツリー・コントロールによって、ユーザーはバインドされたデータ・オブジェクトの行間をナビゲートできます。現時点ではツリー・コントロール用のナビゲーション・バインディングはないため、コントロールにJUTreeDefaultMouseListenerを追加する必要があります。

ツリー・バインディングを設定するには、次のようにします。

  1. Javaビジュアル・エディタでデータ・パネルを開き、JScrollPaneコンテナをパネルに追加します。

  2. データ・コントロール・パレットから、開いたフォームまたはパネルまで、表示するデータ・コレクションをドラッグします。

  3. 続いて、ツリー・コントロールをスクロール可能なペインに追加します

  4. 目的のJTreeコントロール用のツリー・バインディング・エディタを表示します

ツリーのルート・ノードを定義するには、次のようにします。

  1. ツリー・バインディング・エディタで、「規則の編集」タブをクリックし、マスター・データ・コレクションから表示する親ノードの規則を定義します。たとえば、Customerのマスター・コレクションには、Orderのディテール・コレクションがあります。

  2. 「データ・コレクション定義」リストから、ツリーのルート・ノードへの移入に使用するデータ・コレクションを選択します。これは、ルート・ノードを定義するマスター・コレクションです。たとえば、Orderディテール・コレクションがあるCustomerのマスター・コレクションを選択します。

  3. 「属性の表示」リストから、ツリーの親ノードとして表示する属性を1つ選択します。たとえば、各Customerの姓などです。現在、JTreeコントロールで各ブランチに表示できる属性は1つのみです。

  4. 「ブランチ規則アクセッサ」リストから、マスター・コレクションとツリーの最初のブランチ間のリンクを指定するアクセッサを選択します。たとえば、CustomerとOrderコレクションに対するビジネス・コンポーネント・アクセッサの場合、リストにOrdersViewのように表示されます。

    警告: 選択したデータ・コレクションに対するマスター/ディテール・コレクションがデータ・モデルに含まれていないと、「ブランチ規則アクセッサ」リストには何も表示されません。ツリー内のリーフ(終端)・ノードを除くすべてのブランチに対し、「モデル」プロジェクトでビジネス・サービス用のアクセッサを定義する必要があります。

  5. 「新しい規則を追加」ボタンをクリックし、ルート・ノードの規則の定義を完了します。

  6. 「規則の表示」タブをクリックし、ルート・ノード規則を表示します。たとえば、顧客と注文の例では、次のように表示されます。

    Viewobject rule: myPackage.CustomersView, CustLastName, OrdersView

    この規則はADF Business Componentsに基づいており、ツリーのルート・ブランチのノードとしてCustLastName属性を表示し、OrdersViewビュー・リンク・アクセッサを使用してツリーの2番目のブランチとしてCustomersのOrderにドリルダウンして表示する、という意味です。次に、Orderビュー・オブジェクトから表示する属性を定義する規則を追加します。

ツリーのブランチを定義するには、次のようにします。

  1. 「規則の編集」タブをクリックし、最初のディテール・コレクションから表示する子ブランチ属性の規則を定義します。

  2. 「データ・コレクション定義」リストから、ツリーのブランチ・ノードへの移入に使用するデータ・コレクションを選択します。これは、ツリーのノードを定義するディテール・コレクションです。たとえばOrderディテール・コレクションを指定し、そこからOrder ID情報をツリーに表示します。

  3. 「属性の表示」リストから、ツリーのブランチ・ノードとして表示する属性を1つ選択します。たとえば、各Customerの姓などです。

  4. 「ブランチ規則アクセッサ」リストで、ツリーの最初のブランチと、次のブランチ間のリンクを定義する、アクセッサを選択します。たとえば、OrderとOrderItemコレクションに対するビジネス・コンポーネント・アクセッサの場合、リストにはOrderItemsViewのように表示されます。

    注意: 選択したブランチ・データ・コレクションに対してビジネス・サービス・モデルのプロジェクトにそれ以上アクセッサが定義されていない場合、リストには<none>と表示されます。これはアクセッサが必要でないことを意味し、選択したコレクションの属性がツリーのリーフ・ノードとして表示されます。

  5. 「新しい規則を追加」をクリックし、子ブランチ・ノードの規則の定義を完了します。

  6. 「規則の表示」をクリックし、ルート・ノードの規則を表示します。たとえばCustomersとOrderの例の場合には、次のように表示されます。

    Viewobject rule: myPackage.OrdersItemsView, OrderId, OrderStatus <none>

    この規則は、ADF Business Componentsに基づいており、ツリーの2番目のブランチのノードとしてOrderIdおよびOrderStatusの各属性を表示する、という意味です。最後のnoneは、このブランチはリーフ・ノードで構成されるため、アクセッサがないことを表しています。

  7. ビジネス・サービスがブランチを横断するためのアクセッサをサポートしているかぎり、「規則の編集」タブでこれらのステップを繰り返し、ツリーの新規ブランチを定義できます。

  8. 「OK」をクリックし、バインディング設定を保存します。

    バインディング・エディタにより、定義した規則のエラー・チェックが行われます。次のエラー・メッセージが表示されます。

JDeveloperはjbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを生成します。たとえば、データ・コントロール・パレットからツリーを挿入後、メタデータを指定するためにDataControlIdを参照するメソッドは次のようになります。

myTree.setModel((TreeModel)panelBinding.bindUIControl("DataControlId", myTree));

新しいバインディング用のメタデータは、バインディング定義ファイル(PageDef.xml)に表示されます。

イメージをツリー・バインディング・エディタの表示に追加するには、次のようにします。

「ツリー・バインディング・エディタ」では、ブランチ内の各ノードに表示するアイコンと、各ブランチの開くアイコンおよび閉じるアイコンを選択できます。「ツリー・バインディング・エディタ」にアイコンを追加するには、初期化されたイメージを変数宣言に追加する必要があります。次に例を示します。

 

  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がスローされます。


ADFバインディングとSwingコントロールについて
ADF Swingコントロールを使用したUIのナビゲートについて