Oracle® Fusion Middleware

Oracle Application Development Framework Swingアプリケーションの開発

12c (12.1.3)

E59440-01(原本部品番号:E41267-01)

2014年5月

ADF SwingおよびOracle Application Development Framework (Oracle ADF)を使用してSwingデスクトップ・アプリケーションを作成およびデプロイする方法について説明します。

Oracle Fusion Middleware Oracle Application Development Framework Swingアプリケーションの開発 12c (12.1.3)

E59440-01

Copyright © 2013, 2014 Oracle and/or its affiliates. All rights reserved.

原本主著者:  Ralph Gordon

原本協力著者:  David Mathews、Cindy Hall

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 ADF Swingアプリケーションの概要

- 1.1 ADF Swingについて

- 1.1.1 ADF Swingの使用の利点

- 1.1.2 ADF Swingのアーキテクチャ

- 1.1.2.1 Swing MVC

- 1.1.2.2 Oracle Application Development Framework

- 1.2 Oracle ADFと連携するデスクトップ・アプリケーションの作成

- 1.3 ADF Swingを使用するデスクトップ・アプリケーションの作成時の処理内容

- 1.4 ビジネス・コンポーネントへの接続

- 1.4.1 構成名の変更方法

- 1.4.2 構成ファイルの変更方法

- 1.4.3 クライアント・アプリケーション・ライブラリに関する必知事項

2 ADF Swingフォームおよびパネルの作成

- 2.1 ADF Swingフォームおよびパネルの作成について

- 2.1.1 ADF Swingデザインタイム・ウィザード

- 2.1.2 通常のADF Swingフォーム

- 2.1.3 ADF Swingフォームでのナビゲーション

- 2.2 ADF Swingパネルおよびフォームの作成手順

- 2.3 ADF Swingフォーム作成時の処理内容

- 2.4 ADF Swingのコード生成に関する必知事項

- 2.5 ビジネス・コンポーネントの属性設定に関する必知事項

- 2.6 クライアント・データ・モデルの定義の作成方法

- 2.7 単一表のADF Swingフォームの作成方法

- 2.8 マスター/ディテールのADF Swingフォームの作成方法

- 2.9 空のADF Swingフォームの作成方法

- 2.10 空のADF Swingパネルの作成方法

- 2.11 「データ・コントロール」パネルからのADF Swing編集フォームの作成方法

- 2.12 「データベース」ウィンドウからのADF Swingフォームの作成方法

3 ADF Swingフォームおよびパネルの変更

- 3.1 ADF Swingフォームおよびパネルの変更について

- 3.1.1 コレクション全体またはデータ・オブジェクトに対する値バインディング

- 3.1.2 個々のデータ・オブジェクト属性値の値バインディング

- 3.2 Javaビジュアル・エディタを使用してADF Swingフォームを作成する方法

- 3.3 ADF SwingパネルへのUIコンポーネントの挿入方法

- 3.4 クライアント・データ・モデル参照の変更方法

- 3.5 処理ハンドラでADF Swingフォームを開く方法

- 3.6 空のADF Swingフォームにデータ・パネルをドロップする方法

- 3.7 空のSwingフォームでデータ・パネルをレイアウトする方法

- 3.8 ADF Swingフォームでのメソッドとパラメータとのバインディング

- 3.8.1 JavaBeanメソッドを「データ・コントロール」パネルに移入する方法

- 3.8.2 メソッド・バインディングが含まれるADF Swingフォームを作成する方法

- 3.8.3 JTableコンポーネントを使用するメソツド結果の表示に関する必知事項

4 データ・バインディングでの作業

- 4.1 データ・バインディングでの作業について

- 4.1.1 ADF Swingのコンテナ

- 4.1.2 標準Javaコンテナ

- 4.2 ADF Swingコントロールを使用したUIのナビゲーション

- 4.2.1 ナビゲーション・バーを使用して移動する方法

- 4.2.2 ツリー・ナビゲーションを使用して移動する方法

- 4.3 ADF Swingのデータ・コンテキストに関する必知事項

- 4.4 実行時の処理: パネル・バインディングの機能のしかた

- 4.5 ADF Swingブートストラップ・コードに関する必知事項

- 4.6 データバインドされたテキスト・フィールドにオブジェクト属性を表示する方法

- 4.7 データバインドされた表またはツリー・コントロールに新しい行を作成する方法

- 4.8 データバインドされた表内の列をソートする方法

- 4.9 実行時の処理: コントロール・バインディングの機能のしかた

- 4.9.1 コントロールへのデータの移入

- 4.9.2 コントロールを介したデータの更新

5 ADFバインディングのカスタマイズ

- 5.1 ADFバインディングのカスタマイズについて

- 5.2 ADF SwingパネルのADFバインディングのカスタマイズ方法

- 5.3 ADFアクション・バインディングのカスタマイズ方法

- 5.4 ADF属性バインディングのカスタマイズ方法

- 5.5 ADF配列コンボ・ボックス・バインディングのカスタマイズ方法

- 5.6 ADFブール・バインディングのカスタマイズ方法

- 5.7 ADFバインディングされた範囲バインディングのカスタマイズ方法

- 5.8 ADFフォーマット済テキスト・フィールド・バインディングのカスタマイズ方法

- 5.9 ADFイテレータ・バインディングのカスタマイズ方法

- 5.10 ADFリスト・バインディングのカスタマイズ方法

- 5.11 列挙モードのADFリスト・バインディングのカスタマイズ方法

- 5.12 LOVモードのADFリスト・バインディングのカスタマイズ方法

- 5.13 ADF LOVボタン・バインディングのカスタマイズ方法

- 5.14 LOVダイアログに関する必知事項

- 5.15 ADFスクロール・バインディングのカスタマイズ方法

- 5.16 ADF表バインディングのカスタマイズ方法

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

6 ADF Swingパネルでのグラフの表示

- 6.1 ADF Swingパネルでのグラフについて

- 6.2 ADF Swingパネルに対してグラフを作成する方法

- 6.3 グラフ・コンポーネント作成時の処理内容

- 6.4 グラフ・コンポーネントをカスタマイズする方法

- 6.5 グラフ・データを変更する方法

7 ADF Swingコントロールでの作業

- 7.1 ADF Swing固有のコントロールについて

- 7.2 JUArrayComboBoxコントロールの使用方法

- 7.3 JUImageコントロールの使用方法

- 7.4 ADF Swingアプリケーションにおけるマルチメディアに関する必知事項

- 7.5 JULabelコントロールの使用方法

- 7.6 ラベル・コントロールの使用方法

- 7.7 JULovEditButtonコントロールの使用方法

- 7.8 JUNavigationBarコントロールの使用方法

- 7.9 検索モードでのJUNavigationBarコントロールの使用方法

- 7.10 パネル内のADF Swingコントロールに対して検索モードを無効化する方法

- 7.11 検索モードでのイテレータ・バインディングに関する必知事項

- 7.12 JURadioButtonGroupPanelコントロールの使用方法

- 7.13 JUShuttlePanelコントロールの使用方法

- 7.14 JUStatusBarコントロールの使用方法

8 ADF Swingユーザー・インタフェースでの検証の使用方法

- 8.1 イベントの検証について

- 8.2 ADFコントロール・バインディングでの検証の使用方法

- 8.3 ADF Swingパネルでの検証の使用方法

9 ADF Swingログイン・ダイアログでの作業

- 9.1 ADF Swingログイン・ダイアログについて

- 9.2 ログイン・ダイアログを作成する方法

- 9.3 ログイン・ダイアログを使用してアプリケーションを実行する方法

- 9.4 ログイン・ダイアログを使用しないでアプリケーションを実行する方法

- 9.5 ログイン・ダイアログのコードのカスタマイズに関する必知事項

- 9.6 JDBC接続と連動するようにログイン・ダイアログを変更する方法

10 ADF Swingアプリケーションの実行時パフォーマンスの最適化

- 10.1 ADF Swingアプリケーションの実行時パフォーマンスの最適化について

- 10.2 ADF SwingからADFビジネス・コンポーネントへの更新を遅延する方法

- 10.3 同期モード・プロパティに関する必知事項

- 10.4 ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法

11 ADF SwingアプリケーションとJava Web Startの使用方法

- 11.1 Java Web Startでの作業について

- 11.1.1 Java Web Startテクノロジ

- 11.1.2 Java Web Startと統合WebLogic Server

- 11.1.3 Java Web StartとOracle WebLogic Server

- 11.2 ADFビジネス・コンポーネント・ランタイムのプロパティを定義する方法

- 11.3 ランタイム構成情報を設定する方法

- 11.4 Java Web Start JNLP定義を作成する方法

- 11.5 JNLP定義の作成時の処理内容

- 11.6 JDeveloperでJava Web StartとともにADF Swingアプリケーションを実行する方法

はじめに

Oracle Application Development FrameworkによるSwingアプリケーションの開発にようこそ。

対象読者

このドキュメントは、Oracle Application Development Framework (Oracle ADF)を使用してデータベース中心のデスクトップ・アプリケーションを作成およびデプロイする必要のあるエンタープライズ開発者を対象としています。このガイドでは、ADFビジネス・コンポーネントおよびADF Swingを使用してデータバインドされたJavaフォームを表示するADFアプリケーションを構築する方法について説明します。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

Oracle Application Development Frameworkの理解

Oracle Application Development FrameworkによるFusion Webアプリケーションの開発

Oracle JDeveloperによるアプリケーションの開発

Oracle ADFデータ・コントロールによるアプリケーションの開発

Oracle ADFデスクトップ統合によるアプリケーションの開発

Oracle JDeveloperのインストール

Oracle JDeveloperのオンライン・ヘルプ

Oracle JDeveloperリリース・ノート(JDeveloperインストール内およびOracle Technology Networkから入手)

Oracle ADFモデルJava APIリファレンス

Oracle ADFライフサイクルJava APIリファレンス

Oracle ADF Share Java APIリファレンス

Oracle ADFモデル・テスターJava APIリファレンス

Oracle ADFビジネス・コンポーネントのためのGeneric Domains Java APIリファレンス

Oracle ADFビジネス・コンポーネントのためのinterMedia Domains Java APIリファレンス

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 ADF Swingアプリケーションの概要

この章では、ADF SwingテクノロジおよびADF Swingアーキテクチャについて説明します。

この章の内容は次のとおりです。

- 第1.1項「ADF Swingについて」

- 第1.2項「Oracle ADFと連携するデスクトップ・アプリケーションの作成」

- 第1.3項「ADF Swingを使用するデスクトップ・アプリケーションの作成時の処理内容」

- 第1.4項「ビジネス・コンポーネントへの接続」

このマニュアルおよびこの他のマニュアルに、なじみのない用語が出てきた場合は、用語集で定義を確認してください。

1.1 ADF Swingについて

ADF Swingは、データバインドされたJavaクライアントを開発するためのテクノロジであり、これによりSwingコンポーネントとビジネス・サービスとの間の相互作用のコーディングが単純化されます。ADF Swingは、次の構成は次のとおりです。

- Javaクラス、およびSwingコンポーネントをビジネス・サービスにバインドするためのAPI

- XMLデータ定義および構成ファイル

- データバインドJavaフォームを作成するためのデザインタイム・ツール(ウィザードなど)

- 特定のSwingコンポーネントを拡張するいくつかのユーザー・インタフェース・コンポーネント

Oracle Application Development Framework (Oracle ADF)では、ADF Swingを使用して、ADFビジネス・コンポーネント、Enterprise Java Bean、Webサービスなどバック・エンドのいくつかのビジネス・サービスと連携できます。

JDeveloperには、ADF Swing (データバインドJavaクライアントの開発テクノロジ)による開発を可能にするツールおよびウィザードがあります。これらのデータバインドされたJavaクライアントによって、Oracle ADFアプリケーション内のSwingコンポーネントとビジネス・サービスとの間の相互作用のコーディングが単純化されます。

さらに、JDeveloperは、Swingパネルおよびフォームを作成および編集するためのADF Swingウィザードなど、いくつかのADF Swing固有の編集ツールも備えています。

1.1.1 ADF Swingの使用の利点

ADF Swingを使用してJava Swingクライアントを構築する利点は、次のとおりです。

- ウィザードによって、ADF Swingフォームがすばやく作成されます。

- 次のような任意のモデルベースのコントロールに対してデータ・ソースへのバインディングがサポートされます。

- 標準Swingコンポーネント

- JDeveloper提供のADF Swingコンポーネント

- サード・パーティ・モデルベースのアドイン・コンポーネント

- XMLデータ定義によって、ADF Swingフレームおよびパネルを簡単に再使用可能です。

- Javaクライアントから、直接ADFバインディングを通してモデル・レイヤーのADFビジネス・コンポーネントのリモート・メソッドを使用できます。

ADF SwingとADFビジネス・コンポーネントを使用するデスク・アプリケーションでは、データ・アクセスの実装とロジックの更新は必要ありません。ADF SwingおよびADFビジネス・コンポーネントは、データ・アクセス・コードとUIコードを明確に分離することで、ビュー・レイヤーに負荷をかけないシン・クライアントを実現します。さらに、ADF Swingを使用することでデータ・アクセスが向上します。それは、ADFビジネス・コンポーネントへのそれのバインディングによって、ADFビジネス・コンポーネントに実装されている多数のパフォーマンス機能を活用できるためです。さらに、ADF Swingは、Model-View-Controllerアーキテクチャに依存しているため、ADF Swingフォームの設計は、Swingコンポーネントを使用する場合と変わりません。

さらにJavaクライアント・コードは単純化可能であり、これはADFビジネス・コンポーネントのデプロイ方法に関係なく、アクセス方法を変更する必要がないためです。かわりに、デスクトップ・アプリケーションは、ADFビジネス・コンポーネントの機能によって、単純な構成定義ファイルを使用してアプリケーション・モジュールに接続します。Javaクライアント・コードは、次のどのデプロイメント・シナリオでも変わりません。

- ADFビジネス・コンポーネントが、ADF Swingと同じVMにローカルにデプロイされている

- ADFビジネス・コンポーネントが、EJBを使用してリモートにデプロイされている

1.1.2 ADF Swingのアーキテクチャ

ADF Swingは、Oracle ADFのテクノロジであり、Swingコンポーネントを使用してデータバインドされているJavaクライアントの構築を容易にします。ADF Swing APIは、Oracle ADFの機能を利用して、バックエンド・ビジネス・サービスにバインドされているJava UIを構築する一連のJavaクラスで構成されています。クライアントとビジネス・サービスの間の通信は、Oracle ADFヘルパー・クラスによって処理されます。

1.1.2.1 Swing MVC

ADF Swingのアーキテクチャは、Model-View-Controller (MVC)パターンに基づいています。MVCでは、次のように、各コンポーネントが論理的に分離している3つの通信オブジェクトがあります。

- モデルは、コンポーネントのデータまたは状態を表しており、それの基礎となる論理表現です。

- ビューは、コンポーネントのビジュアル表現であり、それがどのように表示されるのか(たとえば、それがボタンなのか何か他のコントロールなのか、テキストとアイコンのどちらを使用するのか、どのような境界線および色を使用するのか)を記述します。

- コントローラは、クライアントとの相互作用(ユーザーによる入力の解釈方法)を指定します。コントローラは、ユーザーがテキストを入力したとき、ボタンをクリックしたとき、[Tab]キーで次のフィールドに移動したときなどに、登録されているリスナーに通知します。

たとえば、JCheckBoxは、定義済のモデル、ビューおよびコントローラを持つSwingコンポーネントです。ユーザーがチェック・ボックスをクリックすることでコントローラと相互作用したときに、モデルの状態を(falseからtrueに、またはその逆に)変更する必要があることがコントローラからモデルに通知されます。ビューは、モデルの状態の変更をリスニングし、その後(たとえば、チェック・ボックスを選択した状態の表示にすることで)それ自体を更新できます。このアーキテクチャに関する重要な点は、モデルが、それを表示している1つまたは複数のビューも、それを更新するために使用されるコントロールも認識していないことです。

Swing APIによって、コンポーネントのmodelまたは、場合によってはdocumentプロパティを使用してすべてのコンポーネントにモデルを設定できます。Swingでは、JTextComponentのどのサブクラスのモデルも、documentという名前が付いており、それには、setDocument()およびgetDocument()メソッドを使用してアクセスします。標準のSwing JLabelコンポーネントはデータを表さないため、MVCアーキテクチャにはなりません。ただし、ビジネス・コンポーネント・データを使用してラベルを割り当てる必要がある場合にこの制限に対処するために、ADF SwingはJULabelコンポーネントを備えています。

1.1.2.2 Oracle Application Development Framework

クライアント・テクノロジとしてADF Swingを使用してデスクトップ・アプリケーションを開発する場合は、Oracle ADFのJava EEおよびModel-View-Controllerアーキテクチャを利用します。

Oracle ADFの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のOracle ADFでのFusion Webアプリケーションの構築の概要に関する項を参照してください。

1.2 Oracle ADFと連携するデスクトップ・アプリケーションの作成

標準Swingコンポーネントに依存するJavaデスクトップ・アプリケーションを作成し、そのアプリケーションにOracle ADFの利点を組み込むことができます。このドキュメントでは、ADF Javaデスクトップ・アプリケーションを、ADF Swingアプリケーションと呼びます。JDeveloperでADF Swingアプリケーションを作成する場合:

- JDeveloperの「新規ギャラリ」のADF Swingウィザードを使用して、データバインドされたフォームおよびパネルをすばやく生成できます。

- 「データ・コントロール」パネルを使用して、データバインドされたSwingコンポーネントを、ADF Swingフォームおよびパネルにすばやく追加できます。

ADF Swingフォームおよびパネルを生成した後、続けて、Javaビジュアル・エディタを使用してフォームの外観をカスタマイズできます。

ADF Swingアプリケーションを作成する手順は次のとおりです。

1. JDeveloperのメニューから、「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「一般」カテゴリを開き、「アイテム」リストから「Javaデスクトップ・アプリケーション」をダブルクリックします。

3. Javaデスクトップ・アプリケーションの作成ウィザードを使用してアプリケーションおよびプロジェクトに名前を付けます。
これにより、データ・モデル・プロジェクトにビジネス・サービスのADFビジネス・コンポーネントを組み込むADF Swingアプリケーションが作成されます。詳細は、Oracle Application Development FrameworkによるFusion Webアプリケーションの開発のADFビジネス・コンポーネント・スタートガイドを参照してください。

注意:

アプリケーション・エラーを防ぐために、ビジネス・サービスとJavaクライアント・アプリケーションの開発には個別のプロジェクト・フォルダを使用する必要があります。JDeveloperアプリケーション・テンプレートにより、ワークスペースに個別のプロジェクト・フォルダが作成されます。

4. 「アプリケーション」ウィンドウで、データ・モデル・プロジェクトを選択し、「ファイル」→「新規」→「ギャラリから」を選択します。

5. 「新規ギャラリ」で、ビジネス層 - ADFビジネス・コンポーネントを開き、「アイテム」リストの「表からのビジネス・コンポーネント」をダブルクリックします。

6. 「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログを使用して、ビジネス・コンポーネントの基礎とする表が含まれているデータベースへの接続を作成します。
詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータベース接続を使用してデータ・モデル・プロジェクトを初期化する方法に関する項を参照してください。

7. 表からのビジネス・コンポーネントの作成ウィザードを使用して、データ・モデル・プロジェクトのビジネス・コンポーネントに移入します。
詳細は、「Oracle Application Development FrameworkでのFusion Webアプリケーションの開発」の既存の表からの複数のエンティティ・オブジェクトおよびアソシエーションの作成方法に関する項を参照してください。

8. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

9. 「新規ギャラリ」で、「クライアント層」を開き、「ADF Swing」を開き、「空のフォーム」または「空のパネル」をダブルクリックします。

10. ADF Swingウィザードまたは「ADF Swing」ダイアログを使用して、ADF Swingフォームまたはパネルをユーザー・インタフェース・プロジェクトに追加します。
Javaビジュアル・エディタ内にファイルが開きます。詳細は、「ADF Swingフォームおよびパネルの作成」を参照してください。

注意:

ADF Swingウィザードを使用して、必要なブートストラップ・コードが含まれる.javaファイルを生成する必要があります。汎用Javaパネルまたはクラスを使用して、データバインドされたJavaクライアントを設計しないでください。

11. 「アプリケーション」ウィンドウで、「データ・コントロール」パネルを開き、それを使用して、データバインドされたUIコンポーネントを、開いているドキュメントに挿入します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

12. (オプション) 「データ・コントロール」パネルを使用して、ビジネス・サービス・アクションを、開いているドキュメントに挿入します。
詳細は、第3.8項「ADF Swingフォームでのメソッドとパラメータとのバインディング」を参照してください。

13. ADFバインディングを、それらに対応するバインディング・エディタで定義し、そのバインディングの必須のプロパティを指定します。
詳細は、第5章「ADFバインディングのカスタマイズ」を参照してください。

1.3 ADF Swingを使用するデスクトップ・アプリケーションの作成時の処理内容

ADF Swingアプリケーションでは、Swingコントロールとビジネス・サービスのデータ・ソース間のデータ・バインディングは、ADF Swingフォームを作成するために使用するUIコンテナによく似た一連のADF Swingオブジェクトの作成によって行います。このコンテナと、コンテナのADF Swing専用コードは、ADF Swingフォーム・ウィザードを使用して完全なアプリケーションを生成したときに確認できます。たとえば、DeptおよびEmpビュー・オブジェクトを基にしたマスター/ディテール・タイプ・フォームの場合は、ウィザードによって次のクラスが生成されます。

- FrameDeptViewEmpView1: ADF SwingFrameを拡張します(ADF SwingPanelインタフェースのダミー実装)

- MDPanelDeptViewEmpView1: JPanelを拡張し、ADF SwingPanelを実装します。

- PanelDeptView: JPanelを拡張し、ADF SwingPanelを実装します。

- PanelEmpView1: JPanelを拡張し、ADF SwingPanelを実装します。

ここで、JPanelはSwingクラスであり、ADF SwingFrameおよびADF SwingPanelは、ADF Swingの一部であり、アプリケーションのデータ参照パネルを構成します。

出力されるプロジェクト・ファイルと、例1-1に示すADF Swingパネルまたはフォームのモデル参照によって、データバインドされたUIコンポーネントは実行時にADFモデル・レイヤーにアクセスできるようになります。

例1-1 ADF Swingフォームでのモデル参照

(panel.setBindingContext(JUTestFrame.startTestFrame("DataBindings.cpx",
"null", panel, panel.getPanelBinding(), new Dimension(400, 300)));)

詳細は、第4.1項「データ・バインディングでの作業について」を参照してください。

DataBindings.cpxファイルは、個々のページをページ定義ファイルにマップし、DataControls.dcxファイルで定義されているデータ・コントロールの使用方法を宣言します。.cpxファイルでは、アプリケーション全体のOracle ADFバインディング・コンテキストが定義され、メタデータが提供されます。実行時には、このメタデータからOracle ADFバインディング・オブジェクトが作成されます。

1.4 ビジネス・コンポーネントへの接続

ADF Swingアプリケーションは、ADFビジネス・コンポーネントを使用して、デプロイされているビジネス・サービスに接続します。ADF Swingアプリケーションのサーバー接続情報の定義は、bc4j.xcfg構成ファイルに依存しています。このファイルは、データ・モデル・プロジェクト内の特定のアプリケーション・モジュールのすべてのデプロイメント構成を定義し、ADF Swingフォームがアプリケーション・モジュールに属する特定のビュー・オブジェクトにアクセスすることを可能にします。

この構成ファイルを編集することで、ADF SwingアプリケーションがADFビジネス・コンポーネント・アプリケーション・モジュールのデプロイメント・シナリオを識別するために使用する接続情報を更新できます。

注意:

bc4j.xcfgファイルで構成を編集し、デプロイ先プラットフォーム(「中間層サーバー・タイプ」オプション)を変更した場合は、データ・モデル・プロジェクトを更新し、新しいプラットフォームのライブラリを追加する必要があります。データ・モデル・プロジェクトで作成したデプロイメント・アーカイブのCommonおよびMiddle Tierアーカイブでprojectname.jarファイルにデプロイを選択します。

1.4.1 構成名の変更方法

JDeveloperで、データベース・ウィンドウのアプリケーション・モジュール・ノードを右クリックして「構成」を選択することにより、Configuration Managerを使用して構成を作成および編集できます。JDeveloperのアプリケーション・モジュールの概要エディタの「構成」ページで、新しい構成を作成し、デフォルトの構成を変更できます。

1.4.2 構成ファイルの変更方法

JDeveloperは、/myclassesに生成されるADFビジネス・コンポーネント・パッケージの共通ディレクトリにbc4j.xcfgファイルを配置します。たとえば、OnlineOrdersという名前のADFビジネス・コンポーネント・パッケージに対して生成されるbc4j.xcfgファイルは、次のようになります。

<jdev_install>/myclasses/OnlineOrders/common/bc4j.xcfg

注意:

アプリケーションで使用する構成ファイルを変更する場合は、データ・モデル・プロジェクトを再構築し、構成をADF Swingクライアントで使用できるようにする必要があります。

ADF Swingアプリケーションをデプロイする際に、構成ファイルはデプロイしません。ADFビジネス・コンポーネント・アプリケーション・モジュールのデプロイ担当者が、アプリケーション・モジュール・クラス・ディレクトリのサブディレクトリとしてbc4j.xcfgファイルを自動的にデプロイします。デプロイされたbc4j.xcfgファイルに、ADF Swingアプリケーションで使用するために指定した構成が含まれていることと、構成情報が正しいことのみ確認する必要があります。

1.4.3 クライアント・アプリケーション・ライブラリに関する必知事項

ランタイム構成(bc4j.xcfgファイルの)を作成または更新する場合、JDeveloperによっていくつかのアプリケーション・ライブラリが更新されます。ライブラリの1つには、ADF Swingユーザー・インタフェース・プロジェクトおよびADFビジネス・コンポーネント・データ・モデル・プロジェクト(Workspace1_jws_Project1_jpr_ClassesMypackage1ModuleLocalに類似した名前を持つ)に共通のクラス・ファイルが含まれており、それらはJDeveloperでADF Swingアプリケーションをコンパイルして実行するために必要です。このライブラリは、JDeveloperによって、最後に保存された構成定義に基づいて更新されます。したがって、場合によっては、データ・モデル定義を再編集して、目的のクラスでライブラリを更新する必要があります。また、ユーザー・インタフェース・プロジェクトおよびデータ・モデル・プロジェクトを新しいインストールに移動する場合、"指定されたユーザー・ライブラリ"定義をすべて移動する必要があります。ユーザー・ライブラリはすべて、<jdev_install>/systemフォルダのlibraries.xmlファイルにあり、このファイルを新しいJDeveloperインストールにコピーする必要があります。

2 ADF Swingフォームおよびパネルの作成

この章では、デザインタイム・ウィザードを使用してADF Swingフォームおよびパネルを作成する方法について説明します。このウィザードは、ビジネス・サービス・データ・コレクションにバインドされている標準のJFC/Swingコンポーネントを使用し、JavaによってADF Swingフォームを表示するUIクライアントを構築する際に役立ちます。

この章の内容は次のとおりです。

- 第2.1項「ADF Swingフォームおよびパネルの作成について」

- 第2.2項「ADF Swingパネルおよびフォームの作成手順」

- 第2.3項「ADF Swingフォーム作成時の処理内容」

- 第2.4項「ADF Swingのコード生成に関する必知事項」

- 第2.5項「ビジネス・コンポーネントの属性設定に関する必知事項」

- 第2.6項「クライアント・データ・モデルの定義の作成方法」

- 第2.7項「単一表のADF Swingフォームの作成方法」

- 第2.8項「マスター/ディテールのADF Swingフォームの作成方法」

- 第2.9項「空のADF Swingフォームの作成方法」

- 第2.10項「空のADF Swingパネルの作成方法」

- 第2.11項「「データ・コントロール」パネルからのADF Swing編集フォームの作成方法」

- 第2.12項「データベース・ウィンドウからのADF Swingフォームの作成方法」

2.1 ADF Swingフォームおよびパネルの作成について

データ参照パネルには、ユーザーがデータを表示および編集できるコントロールが表示されます。したがって、それには、フィールドとして宣言されてインスタンス化されたコントロールのセットが含まれています。データ参照パネルは、次のように(setBindingContext()コールを介して)親フレームまたはパネルからそのパネル・バインディングを受け取ります。

panel.setBindingContext(panelBinding.getBindingContext());

親コンテナによって、データ参照パネルおよびそのパネル・バインディングが作成された後、jbInit()が呼び出されます。jbInit()メソッド内で、コントロールが属性にバインドされます。

例2-1では、textFieldDeptNameは、基礎となるビジネス・サービスのDepartmentName属性にバインドされているJTextFieldコンポーネントであり、識別子DepartmentNameは、PageDef.xmlファイル内の定義への参照です(このファイルによってバインディング・コンテナが定義されます)。バインディング・コンテナは、イテレータ・バインディングのリストを保持します。各イテレータ・バインディングは、ビュー・オブジェクト・インスタンスおよび(オプションの)行セット・イテレータを指定します。

例2-1 DepartmentName属性にバインドされたJTextFieldコンポーネント

textFieldDeptName.setDocument((Document)panelBinding.bindUIControl
("DepartmentName", textFieldDeptName));

実行時に、setDocument()が呼び出されると、ADF Swingが、指定されている名前(DepartmentName)によってコントロール・バインディングを見つけます。そのフォームのバインディング・コンテキストでそれが見つかると、ADF Swingは、そのコントロール・バインディングの関連付けられたイテレータ・バインディングを使用して、その値にアクセスします。

2.1.1 ADF Swingデザインタイム・ウィザード

機能的には、ADF Swingは、デザインタイムとランタイムに分かれています。デザインタイムは、一連のウィザードおよびダイアログを通してJDeveloper IDEと完全に統合されており、JDeveloperを使用してADF Swingアプリケーションをすばやく生成できます。ADF Swingデザインタイムは、ADF Swingランタイムへのフックが含まれたコードを生成します。

ADF Swingウィザードおよびダイアログは、ADF SwingランタイムAPIの完全なコマンドなしで使用できます。デザインタイムは、ビジネス・サービス・データ・コレクションにバインドされている標準のJFC/Swingコンポーネントを使用して、ADF Swingフォームを表示するデスクトップ・アプリケーションを構築する際に役立ちます。ADF Swingデザインタイムを使用し、標準Swingコントロールに追加するコントロール・バインディングによって、ADF Swingフォームで、ビジネス・コンポーネント上の値を取得および設定できます。

次リストのADF Swingウィザードおよびダイアログは、JDeveloper IDEとともに、ADF Swingアプリケーションまたはアプレットをすばやく構築、実行およびテストするために役立ちます。後で、より高度なコントロールおよびJavaコードを追加してアプリケーションを拡張することで、ADF Swingフォームを変更できます。

- ADF Swingフォームの作成

- ADF Swingパネルの作成

- ADF Swingの空のフォームの作成

- ADF Swingの空のパネルを作成

- Java Web Startファイルの作成

2.1.2 通常のADF Swingフォーム

ADF Swingフォームがクライアント・マシンにデプロイされている場合、ユーザーはそれを使用してフォーム内のデータを表示および操作できます。図2-1に、フレーム・ウィンドウに表示されているADF Swingフォームの例を示します。

図2-1 一般的なADF Swingフォーム

フォームの上部にはメニュー・バーがあります。メニュー・バーの下には、マスター表のデータのナビゲーションを制御するナビゲーション・バーがあります。フォームの下部にあるナビゲーション・バーで、ユーザーは、ディテール表を移動および相互作用できます。

この例では、マスター表はOrders表です。いくつかのデータバインドされたテキスト・フィールド・コントロールは、Orders表の列を表し、ORDER_ID、ORDER_DATE、ORDER_SHIPPED_DATEおよびORDER_TOTALを表示します。このフォームは、データバインドされたグリッド・コントロールを使用して、ディテールOrderItems表のデータを表示します。

データが「Order Id」フィールドに入力されると、ADF Swingフォームは、Orders表とOrderItems表の間のマスター/ディテール・アソシエーションを使用して、グリッド・コントロールに表示されるデータを見つけます。グリッド・コントロールに表示されるディテール表の列は、ORDER_ID、PRODUCT_ID、QUANTITYおよびUNIT_PRICEです。これで、フォームに表示されるデータに関するステータスを表示するステータス・バーがフォームに含まれるようになります。

2.1.3 ADF Swingフォームでのナビゲーション

表2-1は、ADF Swingフォームと相互作用するためにナビゲーション・バーを使用して実行できるアクションを示しています。

表2-1 ナビゲーション・アクション

実行するアクション

クリックするもの

フォーム内のデータ間の移動(先頭、前、次、最後)

選択した行の下の行へのデータの挿入

選択した行の削除

データベースへの変更を保存

フォーム内で行った変更を元に戻す

検索モードをサポートするかしないか、パネルの動作の切り替え。検索モードでは、パネルを使用してパラメータを入力し、クエリを変更します。

パネルと関連付けられた問合せの実行。パネルが検索モードを使用するように設定されている場合、これによって例による問合せが実行されます。

2.2 ADF Swingパネルおよびフォームの作成手順

ADF SwingアプリケーションのADF Swingパネルおよびフォームを作成する手順は、他のADFクライアント・テクノロジを使用してユーザー・インタフェースを作成する手順に似ています。主な違いは、コントローラに基づいたページ・フローを作成しないことと、ADF SwingウィザードなどいくつかのADF Swing固有の編集ツールがあることです。

1. アプリケーション・ワークスペースを作成し、「ADF Javaデスクトップ・アプリケーション」アプリケーション・テンプレートを選択します。
詳細は、第1.2項「Oracle ADFと連携するデスクトップ・アプリケーションの作成」を参照してください。

2. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。

3. ADF Swingパネルまたはフォームをユーザー・インタフェース・プロジェクトに追加します。これを実行する方法はいくつかあります。

- 空のADF Swingフォームをユーザー・インタフェース・プロジェクトに追加します。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。

- ADFビジネス・コンポーネント・プロジェクトを作成します。

- ADFビジネス・コンポーネントを使用している場合、選択したビュー・オブジェクトおよび属性にすでにバインドされているADF Swingフォームを追加できます。
詳細は、第2.1.1項「ADF Swingデザインタイム・ウィザード」を参照してください。

- ADFビジネス・コンポーネントを使用している場合、ビュー・オブジェクトおよび属性にすでにバインドされているADF Swingパネルを、ユーザー・インタフェース・プロジェクトに追加できます。

4. Javaビジュアル・エディタでフォームまたはパネルを開きます。

5. 「コンポーネント」ウィンドウを使用して、データバインドされないSwingコントロール(たとえば、JScrollPaneなどのレイアウト・コンポーネント)を挿入します。

6. 「データ・コントロール」パネルを使用して、データバインドされたUIコンポーネントをADF Swingフレームまたはパネルに挿入します。

7. 「構造」ウィンドウを使用して、ページのUIコンポーネントとデータ・バインディングを参照します。

8. 「プロパティ」ウィンドウを使用して、ページのUIコンポーネントとデータ・バインディングの属性を変更します。

9. ADFバインディング・エディタを使用して、バインドされたコントロールの特性を変更します。

10. すべての編集が完了したら、ユーザー・インタフェース・プロジェクトを構築します。

11. JDeveloperを使用してアプリケーションを実行するかデバッグします。

12. ユーザー・インタフェース・プロジェクトをデバッグしたら、JDeveloperの統合WebLogic ServerおよびJava Web Startアプリケーション・デプロイメント・テクノロジを使用してデプロイメントをテストできます。Java Web Startによって、ユーザーはWebブラウザを使用してアプリケーションおよびアプレットをダウンロードでき、そのアプリケーションはWebブラウザを必要とせずにクライアント上で完全に実行されます。
詳細は、http://www.oracle.com/technetwork/java/javase/overview-137531.htmlを参照してください。

13. 生成されたWeb Application Archive (WAR)ファイルを使用して本番Webサーバーに本番ADF Swingアプリケーションおよびビジネス・サービスをデプロイします。

14. クライアント・マシンにインストールされているJava Web Startで、ユーザーは、アプリケーションを簡単にダウンロードおよび起動できます。Webサーバー上のアプリケーションに対して行われた更新は、Java Web Startによって、ユーザーがそのアプリケーションを起動するたびに処理されます。

2.3 ADF Swingフォーム作成時の処理内容

ADF Swingフォームの作成ウィザードを使用して、ADFビジネス・コンポーネント・データ・モデルに基づいたマスターおよびディテール・パネルを使用するADF Swingアプリケーションを生成すると、ウィザードによってADF Swingフレーム内にコンテナ・パネルが生成されます。このパネルは、いくつかのデータ・パネルをひとまとめにグルーブ化するため、レイアウト・パネルと呼ばれます。レイアウト・パネルは、1つ以上のデータ参照パネル用のUIコンテナとして機能するだけでなく、その共有バインディング・コンテキストを通して、含まれているデータ・パネルに対するデータ・コンテキストを保持できます。

注意:

レイアウト・パネルは、ADF Swingフォームの作成ウィザードによって生成されますが、ADF Swingアプリケーションの必須の部分ではありません。ここでそれについて説明するのは、主に、ADF Swingアプリケーションが、共有バインディング・コンテキストを通してデータ参照パネル間のデータ・コンテキストを保持する方法を示すためです。

アプリケーション・フレームからのバインディング・コンテキストは、例2-2に示すように、そのパネルのsetBindingContext()メソッドへのコールによって、それに含まれているADF Swingパネルに渡すことができます。

例2-2 ADF Swingパネルへのバインディング・コンテキストの受渡し

// get the binding context from the frame
BindingContext _bctx = panelBinding.getBindingContext();
// pass the context to the first child panel
dataPanel.setBindingContext(_bctx);

//alternatively you can use
dataPanel.setBindingContext(panelBinding.getBindingContext());

2.4 ADF Swingのコード生成に関する必知事項

「新規ギャラリ」の「ADF Swing」セクションでADF Swingウィザードを実行すると、ウィザードを使用して次のものを生成できます。

- 複数のADF Swingフォームで構成された完全なデータバインドされたSwingアプリケーション

- 自身のデータバインドされたSwingアプリケーションの作成に使用できる個々のADF Swingフォーム

- データバインドされたSwingコンポーネントを追加するために使用できる空のADF Swingフォーム

このウィザードによって、データを表示するための標準Swingコンポーネントが含まれているADF Swingフォームが生成されます。ADF Swingウィザードの1つを実行する前に、コード生成がこれらのコンポーネントに対して機能する方法の局面を変更できます。特に、「プリファレンス」ダイアログのADF Swingページでコード生成オプションを選択できます。

次のことを指定できます。

- Javaビジュアル・エディタは、新しいフォームまたはデータ・パネルを作成するたびに開く。

- ユーザー・インタフェース・プロジェクトは、指定した追加のインポート文で構築する。

- ユーザー・インタフェース・プロジェクトは、追加のライブラリで構築する(たとえば、独自のフォーム・コンポーネントを使用する必要がある場合など)。この場合、カスタム・コンポーネントを追加しておき、空のADF Swingフォームから始めてADF Swingフォームを作成することを選択できます。

- ADF Swingフォームの作成ウィザードおよびADF Swingパネルの作成ウィザードで、標準Swingコンポーネントまたは独自のカスタム実装を使用するフォームを生成する。現在、ADF Swingフォームに表示されるナビゲーション・バー、ステータス・バー、テキスト・フィールドおよびテキスト・エリアのコンポーネントを置換できます。

- ADF Swingフォームの作成ウィザードで、複数のデータ・パネルが含まれるフォーム(たとえば、マスター/ディテール・フォーム)に1つのナビゲーション・バーを生成する。通常、ウィザードでは、各データ・パネルを、それ自体のナビゲーション・バーとともに作成します。ナビゲーション・バーが1つのみのフォームを作成すると、ビジュアル的に整って見えますが、目的の行セットに移動するためには、ユーザーはデータ・パネル間でフォーカスを変更する必要があります。

2.5 ビジネス・コンポーネントの属性設定に関する必知事項

データ・モデル・プロジェクトで、個々のビュー・オブジェクト属性に関する次のフラグを設定することによって、フォームでの特定の属性の問合せまたは編集を可能にするかどうかを指定できます。

- 問合せ可能
表示されている属性を、ユーザーが検索モードのフォームで開始する問合せで指定できないようにすることができます。ビュー・オブジェクト概要エディタを開き、その属性の属性詳細パネルで「問合せ可能」を選択解除します。

- 更新可能
表示されている属性をユーザーが編集できないようにします。ビュー・オブジェクト概要エディタを開き、その属性の属性詳細パネルで更新不可を選択します。

2.6 クライアント・データ・モデルの定義の作成方法

ADF Swingアプリケーションには、ADFビジネス・コンポーネント・ビュー・オブジェクトに接続するためにクライアント・データ・モデル定義が必要です。ADFビジネス・コンポーネント・クライアント・データ・モデル定義の作成ウィザードを使用して、1つ以上のクライアント・データ・モデル定義をDataBindings.cpxユーザー・インタフェース構成ファイルに追加します。

注意:

JDeveloperによって、最近保存されたデータ・モデル定義に基づいていくつかのアプリケーション・ライブラリが更新されます。データ・モデル定義を作成または編集するが、異なるデータ・モデル定義でプロジェクトを実行する場合は、次の説明のように目的のデータ・モデル定義をADFビジネス・コンポーネント・クライアント・データ・モデル定義の作成ウィザードで開き、それを保存する必要があります。このアクションによって、適切なクラスが生成されます。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
クライアント・データ・モデルを定義するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。

新しいユーザー・インタフェース・プロジェクトに対するクライアント・データ・モデル定義を作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。
ADF Swingフォーム・ウィザードおよびADF Swingパネル・ウィザード内でADFビジネス・コンポーネント・クライアント・データ・モデル定義ウィザードを起動する必要があります。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を選択し、「フォーム」または「パネル」をダブルクリックします。

3. 新しいフォームまたはパネルのウィザードの「データ・モデル」ページで、「新規」をクリックします。
かわりに、起動したADF Swingウィザードを完了して、フォームまたはパネルを作成することもできます。また、生成したフォームまたはパネルをプロジェクトで使用しない場合は、それらを削除できます。新しいDataBindings.cpx構成ファイルは残ります。

4. ADFビジネス・コンポーネント・クライアント・データ・モデル定義ウィザードで、目的のアプリケーション・モジュールおよびランタイム構成を選択します。

5. 「終了」をクリックし、変更を新しいDataBindings.cpx構成ファイルに保存します。

既存のユーザー・インタフェース・プロジェクトで、クライアント・データ・モデル定義を編集する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを開き、DataBindings.cpx構成ファイルを選択します。

2. メイン・メニューから、「ウィンドウ」→「構造」を選択します。

3. 「構造」ウィンドウで、dataControlUsagesを開き、変更するデータ・コントロール定義を選択します。

4. 必要に応じて、データ・コントロール・ノードを右クリックし、「削除」を選択します。

5. 「プロパティ」ウィンドウで、データ・コントロール属性を編集します。

2.7 単一表のADF Swingフォームの作成方法

ADF Swingフォームの作成ウィザードを使用して、既存のADFビジネス・コンポーネント・プロジェクトのデータ・モデルから導出した単一表フォームを作成します。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。

単一表のADF Swingフォームを持つユーザー・インタフェース・プロジェクトを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を開き、「フォーム」をダブルクリックします。

3. ADF Swingフォームの作成ウィザードの「フォームのタイプ」ページに、アプリケーションで使用するために事前に選択されているADF Swingフォームのタイプ「フォーム」が表示されます。
アプレットを作成する場合は、タイプ「アプレット」を選択します。

4. 「フォームのタイプ」ページで、「単一表」を選択し、「次へ」をクリックします。

5. 選択を行ってフォームの外観を定義します。

6. 「データ・モデル」ページで、既存のデータ・モデル定義を選択するか、「新規」をクリックして開発対象のアプリケーション・モジュールを指定するデータ・モデル定義を作成します。

7. 「次へ」をクリックします。

8. 残りのページでは、フォームに表示されるデータを指定するための適切な選択を行います。

9. 「終了」をクリックします。

2.8 マスター/ディテールのADF Swingフォームの作成方法

マスター/ディテール関係は、ADFビジネス・コンポーネントのデータ・モデルに定義されている2つ以上のビュー・オブジェクト間のアソシエーションです。これらのアスター/ディテール関係に依存するADF Swingフォームを生成できます。マスター・フォームの値によって、どのディテール・レコードが表示されるのかが決定されます。

ADFビジネス・コンポーネント・データ・モデル内で定義できるマスター・ディテール関係のタイプは次のとおりです。

- マスター・フォームからディテール・フォーム

- マスター・フォームから複数のディテール・フォーム

- マスター/ディテール関係のカスケード(マスター/ディテール/ディテール・フォーム)

このタイプのADF Swingフォームを生成する最も簡単な方法は、ADF Swingフォーム・ウィザードを起動し、ウィザード内で「マスター/ディテール表」を選択することです。ウィザードを終了すると、プロジェクトに次のものが含まれるようになります。

- ADF Swingブートストラップ・コードが含まれているメイン・フレーム

- マスター・ビュー・オブジェクト・データを表示するマスター・データ・パネル

- ディテール・ビュー・オブジェクト・データを表示するディテール・データ・パネル

- 個々のマスターおよびディテール・データ・パネルの親として使用されるマスター/ディテール・データ・パネル

デフォルトでは、両方のデータ・パネルに、それぞれのナビゲーション・バーが表示されます。マスター・データ・パネルに表示されるナビゲーション・バーで、ユーザーは、付随する詳細を詳細パネルに表示しながら、マスター行セットの行から行へ移動できます。また、ユーザーは、詳細データ・パネルを移動し、現在のマスターにバインドされている個々の行を表示できます。

「プリファレンス」ダイアログでADF Swingコード生成プリファレンスを設定することで、ADF Swingフォーム・ウィザードに強制的に単一ナビゲーション・バーを持つマスター/ディテール・フォームを生成させることができます。ナビゲーション・バーが1つのみのADF Swingフォームを作成すると、ビジュアル的に整って見えますが、行セットに移動するためには、ユーザーはデータ・パネル間でフォーカスを変更する必要があります。

ADF Swingフォームの作成ウィザードを使用して、既存のADFビジネス・コンポーネント・プロジェクトのデータ・モデルから導出したマスター/ディテール・フォームを作成します。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。

単一表のADF Swingフォームを持つユーザー・インタフェース・プロジェクトを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を開き、「フォーム」をダブルクリックします。

3. ADF Swingフォームの作成ウィザードの「フォームのタイプ」ページに、アプリケーションで使用するために事前に選択されているADF Swingフォームのタイプ「フォーム」が表示されます。
アプレットを作成する場合は、タイプ「アプレット」を選択します。

4. 「マスター/ディテール表」を選択し、「次へ」をクリックします。

5. 選択を行ってフォームの外観を定義します。

6. 「データ・モデル」ページで、既存のデータ・モデル定義を選択するか、「新規」をクリックして開発対象のアプリケーション・モジュールを指定するデータ・モデル定義を作成します。

7. 「次へ」をクリックします。

8. 残りのページでは、フォームに表示されるデータを指定するための適切な選択を行います。

9. 「終了」をクリックします。

2.9 空のADF Swingフォームの作成方法

「ADF Swingの空のフォームの作成」ダイアログを使用して、既存のデータ・モデル・プロジェクトのビジネス・コンポーネントからのパネル・バインディングを共有するADF Swingコードが含まれているフレームを作成します。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にビジネス・サービスの実装(たとえば、ADFビジネス・コンポーネント・アプリケーション・モジュール)でプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。

空のフォームを持つユーザー・インタフェース・プロジェクトを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を開き、「空のフォーム」をダブルクリックします。

3. 「ADF Swingの空のフォームの作成」ダイアログで、空のフォームを定義し、「OK」をクリックします。

4. 続いて、新しい空のフォームにデータ・パネルおよびデータバインドされたコントロールを追加できます。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

2.10 空のADF Swingパネルの作成方法

ADF Swingパネルの作成ウィザードまたは「ADF Swingの空のパネルを作成」ダイアログを使用して、データ・パネルをすばやく作成できます。ADF Swingパネルの作成ウィザードで、アプリケーション内のフレームに追加できる完全なデータ・パネルを生成できますが、ADF Swingの空のパネルダイアログには、コントロール・バインディングが含まれていません。どちらのウィザードでも、ADF Swingパネル・バインディングの初期化に必要なコードが生成されます。

ユーザー・インタフェース・プロジェクトに新しいパネル・クラスを追加した後、既存のADF Swingフォームまたはパネルからパネルを追加できます。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。

ADF Swingパネルの作成ウィザードを使用して単一表データ・パネルを追加する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を開き、「パネル」をダブルクリックします。

3. ADF Swingパネルの作成ウィザードで、パネル・コンポーネントをレイアウトするテンプレートを選択します。

4. 「データ・モデル」ページで、既存のデータ・モデル定義を選択するか、「新規」をクリックして開発対象のアプリケーション・モジュールを指定するデータ・モデル定義を作成します。

5. 残りのページでは、フォームに表示されるデータを指定するための適切な選択を行います。

6. 「終了」をクリックします。

ADF Swing空のパネルダイアログを使用してADF Swingデータ・パネルを追加する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」→「ADF Swing」を開き、「空のパネル」をダブルクリックします。

3. 「ADF Swingの空のパネルを作成」ダイアログで、新しい空のデータ・パネルのクラス名を入力し、「OK」をクリックします。

4. Javaビジュアル・エディタで新しいパネル・クラスを開き、コントロールを追加できます。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

完成したADF Swingデータ・パネルをアプリケーションとリンクする手順は次のとおりです。

新しいADF Swingデータ・パネルを作成した後、次のようにして、アプリケーション内のデータ・パネルを再利用できます。

- それを既存のレイアウト・パネル(たとえば、メインADF Swingフレームで作成したもの)に追加する。
詳細は、第3.6項「空のADF Swingフォームにデータ・パネルをドロップする方法」を参照してください。

- ADF Swingの空のフォームウィザードを使用してADF Swingフレームを作成し、それをそこで追加する。
詳細は、第3.6項「空のADF Swingフォームにデータ・パネルをドロップする方法」を参照してください。

2.11 「データ・コントロール」パネルからのADF Swing編集フォームの作成方法

「データ・コントロール」パネルを使用して、選択したコントロールを使用した表示されている値の編集を可能にするデータバインドされたフォームを作成できます。このフォームは、選択するデータ・コレクションのオブジェクトに対して作成されます。

注意:

「データ・コントロール」パネルは、最初にそれを開いたときは空で表示されることがあります。データ・モデル・プロジェクトをコンパイルし、そのパネルにデータ・オブジェクトを移入します。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。
データ・モデル・プロジェクトで、そのビジネス・サービスとしてADFビジネス・コンポーネントを使用している場合、JDeveloperによってそのビジネス・サービスがADFデータ・コントロールとして登録されます。

Javaビジュアル・エディタで既存のパネルに編集可能フォームを作成する手順は次のとおりです。

1. ウィザードを使用して空のADF Swingフォームまたはパネルを作成します。
詳細は、第2.2項「ADF Swingパネルおよびフォームの作成手順」を参照してください。

2. Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。

3. 「アプリケーション」ウィンドウで、「データ・コントロール」ヘッダーの拡張アイコンをクリックします。

4. 「データ・コントロール」パネルで、目的のデータ・コレクションを、開いているフォームまたはパネルにドラッグします。

5. ポップアップ・リストから編集フォームの追加を選択します。

6. 「ADF Swing編集フォームの作成」ダイアログで、表示したくない属性を選択し、「削除」ボタンをクリックします。

7. 必要に応じて、属性を選択し、上または下矢印をクリックし、フォーム内でのその属性の表示位置を変更します。

8. 必要に応じて、「制御」ドロップダウンを選択し、属性値を表示するコントロールを選択します。

9. 必要に応じて、ラベルを表示しない場合は属性に対して「ラベルの作成」を選択解除します。
デフォルトでは、表示ラベルに属性IDが使用されます。また、ビジネス・オブジェクト属性に対してコントロール・ヒント・ラベルが存在している場合は、属性IDのかわりにそのコントロール・ヒントがラベルとして使用されます。「ラベルの作成」を選択したままにします。

10. 「OK」をクリックして設定を保存します。
JDeveloperによって、編集フォームが、開いているフォームまたはパネル内に新規パネルとして作成されます。

11. Javaビジュアル・エディタで、新しい編集フォーム・パネルのサイズを変更し、コントロールを表示します。
編集フォームでは、柔軟なコンポーネント・レイアウトのためにJGoodies FormLayoutマネージャが使用されます。

編集フォーム・パネルのソースはファイルPanel<コレクション名>Helper.javaに、パネルのコントロール・バインディング定義はPanel<コレクション名>HelperPageDef.javaに表示されます。

フォーム内でfetchAttributeProperties()メソッドを定義することで、ADF Swingアプリケーションのパフォーマンスを向上させることができます。これにより、フォームはバッチ・モードで動作し、属性値をフェッチするようになります。詳細は、第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」を参照してください。

2.12 データベース・ウィンドウからのADF Swingフォームの作成方法

データベース・ウィンドウは、表示されている値を選択したコントロールによって編集可能な、データバインドされたフォームを作成するために使用します。フォームおよび必要なデータ・バインディングが、選択したデータベース表に対して作成されます。

Javaビジュアル・エディタで既存のパネルにフォームを作成する手順は次のとおりです。

1. ウィザードを使用して空のADF Swingフォームまたはパネルを作成します。
詳細は、第2.2項「ADF Swingパネルおよびフォームの作成手順」を参照してください。

2. Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。

3. 「プロパティ」ウィンドウで、「レイアウト」ドロップダウン・リストからBorderLayoutを選択します。
詳細は、第3.7項「空のSwingフォームでデータ・パネルをレイアウトする方法」を参照してください。

4. 「コンポーネント」ウィンドウで、Swingコンテナページを開き、JScrollPaneコンポーネントを選択します。

5. Javaビジュアル・エディタで空のフォーム内をクリックし、スクロール・ペインをそのデフォルト・サイズでドロップします。

6. スクロール・ペインのサイズを変更します。

7. 「ウィンドウ」メニューから、「データベース」→「データベース」を選択します。

8. 「データベース」ウィンドウで、目的のデータベース表を、スクロール・ペインの上部にある開いているフォームまたはパネルにドラッグします。

9. 編集可能フォームを作成する場合、ポップアップ・リストから編集フォームの追加を選択します。
詳細は、第2.11項「「データ・コントロール」パネルからのADF Swing編集フォームの作成方法」を参照してください。

10. かわりに、子の追加を選択することで空のフォームに特定のコンポーネントを追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

データ・パネルまたはフォームをレイアウトした後、フォーム内でfetchAttributeProperties()メソッドを定義することで、ADF Swingアプリケーションのパフォーマンスを向上させることができます。これにより、フォームはバッチ・モードで動作し、属性値をフェッチするようになります。詳細は、第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」を参照してください。

3 ADF Swingフォームおよびパネルの変更

この章では、Javaビジュアル・エディタを使用してADF Swingアプリケーションをカスタマイズする方法について説明します。「データ・コントロール」パネルを使用して、データバインドされたUIコンポーネントをADF Swingの準備済フレームまたはパネルに挿入します。

この章の内容は次のとおりです。

- 第3.1項「ADF Swingフォームおよびパネルの変更について」

- 第3.2項「Javaビジュアル・エディタを使用してADF Swingフォームを作成する方法」

- 第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」

- 第3.4項「クライアント・データ・モデル参照の変更方法」

- 第3.5項「処理ハンドラでADF Swingフォームを開く方法」

- 第3.6項「空のADF Swingフォームにデータ・パネルをドロップする方法」

- 第3.7項「空のSwingフォームでデータ・パネルをレイアウトする方法」

- 第3.8項「ADF Swingフォームでのメソッドとパラメータとのバインディング」

3.1 ADF Swingフォームおよびパネルの変更について

ADF Swingウィザードを使用してADF Swingフォームおよびパネルを生成した後、生成したアプリケーション・ファイルをカスタマイズできます。JDeveloperは、ビジュアル・ツールを使用したアプリケーションのカスタマイズに役立ちます。たとえば、「データ・コントロール」パネルを使用して、すでにデータバインドされているUIコンポーネントをADF Swingの準備済フォームまたはパネルに挿入できます。

3.1.1 コレクション全体またはデータ・オブジェクトに対する値バインディング

「データ・コントロール」パネルは、表3-1に示すように、データ・コレクション全体(行セットを構成するデータ・オブジェクトで構成されている)をバインドするために使用できるUIコンポーネントを提供します。

表3-1 データ・コレクション全体にバインドできるUIコンポーネント

UIコンポーネント

ドラッグ・アンド・ドロップの形式

ADFバインディング・タイプ

表

表バインディング

コンボ・ボックス

ナビゲーション・モードでのリスト・バインディング

リスト(ScrollPane内)

ナビゲーション・モードでのリスト・バインディング

スピナー

ナビゲーション・モードでのリスト・バインディング

ラジオ・ボタン・グループ

ナビゲーション・モードでのリスト・バインディング

ナビゲーション・バー

イテレータ・バインディング

ツリー

ツリー・バインディング

グラフ

グラフ・バインディング

スライダ

スクロール・バインディング

スクロール・バー

スクロール・バインディング

3.1.2 個々のデータ・オブジェクト属性値の値バインディング

「データ・コントロール」パネルは、表3-2に示すように、1つのデータ・オブジェクト属性をバインドするために使用できるUIコンポーネントを提供します。

表3-2 1つのデータ・オブジェクト属性にバインドできるUIコンポーネント

UIコンポーネント

ドラッグ・アンド・ドロップの形式

ADFバインディング・タイプ

テキスト・フィールド

属性バインディング

編集ペイン

属性バインディング

JULabel

属性バインディング

ラベル(ADFビジネス・コンポーネントが属性のラベル・コントロール・ヒントを表示するためのもの)

属性バインディング

パスワード・フィールド

属性バインディング

テキスト・エリア

属性バインディング

テキスト・ペイン

属性バインディング

ボタンLOV

LOVバインディング

チェック・ボックス

ブール・バインディング

フォーマット済編集フィールド

フォーマット済テキスト・バインディング

コンボ・ボックス

列挙モードでのリスト・バインディング

リスト

列挙モードでのリスト・バインディング

スピナー

列挙モードでのリスト・バインディング

ラジオ・ボタン・グループ

列挙モードでのリスト・バインディング

プログレス・バー

バインディングされた範囲バインディング

スクロール・バー

バインディングされた範囲バインディング

スライダ

バインディングされた範囲バインディング

3.2 Javaビジュアル・エディタを使用してADF Swingフォームを作成する方法

「ADF Swingの空のフォームの作成」ダイアログで、ADF Swingフォームの作成に使用できる空のフォームを作成でき、追加のJavaコードを記述する必要はありません。ADF Swingの空のフォームに定義されているmain()には、ブートストラップ・コードと呼ばれる次のようなADF Swingコードが含まれています。

- フォームのデータ・モデルを提供するビジネス・サービス・インスタンス(ADFビジネス・コンポーネント・アプリケーション・モジュールなど)への接続を確立します。

- データ・モデルからのパネル・バインディングのインスタンスを作成し、データバインドされたSwingコンポーネントへのデータ・アクセスを提供します。

ウィザードによって生成されるブートストラップ・コードによって、ADF Swingの空のフォームが、そのパネル・バインディングを、追加するADF Swingデータ・パネルと共有することが可能になります。Javaビジュアル・エディタを使用して、ADF Swingデータ・パネルを追加し、最終的なデータバインドされたADF Swingフォームを作成できます。

注意:

ADF Swingフォームの作成ウィザードは、データバインドされたADF Swingフォームを生成し、そのウィザードの使用中に選択したADFビジネス・コンポーネント・ビュー・オブジェクトを参照および編集するために役立ちます。独自の設計によるADF Swingフォームを作成する必要がある場合、最初からデータバインドされている空のフォームから始めます。

すべてJavaビジュアル・エディタ内で、データバインドされたADF Swingフォームを作成する手順は次のとおりです。

1. 「ADF Swingの空のフォームの作成」ダイアログを使用して空のフォームを作成します。これにより、パネル・バインディングを共有できるユーザー・インタフェース・プロジェクトにADF Swingフレームが追加されます。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。

2. ADF Swingデータ・パネルをADF Swingの空のフォームにドロップします。
詳細は、第3.6項「空のADF Swingフォームにデータ・パネルをドロップする方法」を参照してください。

3.3 ADF SwingパネルへのUIコンポーネントの挿入方法

「データ・コントロール」パネルを使用して、データバインドされたコントロールをADF Swingパネルに挿入します。

注意:

「データ・コントロール」パネルは、最初にそれを開いたときは空で表示されることがあります。データ・モデル・プロジェクトをコンパイルし、そのパネルにデータ・オブジェクトを移入します。

作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

1. ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。

2. データ・モデル・プロジェクトをコンパイルします。
データ・モデル・プロジェクトで、そのビジネス・サービスとしてADFビジネス・コンポーネントを使用している場合、JDeveloperによってそのビジネス・サービスがADFデータ・コントロールとして登録されます。

Javaビジュアル・エディタで、データバインドされたUIコンポーネントをパネルに挿入する手順は次のとおりです。

1. ウィザードを使用して空のADF Swingフォームまたはパネルを作成します。
詳細は、第2.1.1項「ADF Swingデザインタイム・ウィザード」を参照してください。

2. Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。

3. 「アプリケーション」ウィンドウで、「データ・コントロール」ヘッダーの拡張アイコンをクリックします。

4. 「データ・コントロール」パネルで、UIコンポーネントにバインドするデータ・コレクション、属性またはアクションを、開いているドキュメントにドラッグします。

5. 子の追加ポップアップ・リストから、開いているドキュメントに追加するUIコンポーネントを選択します。
編集中のドキュメントに新しいUIコンポーネントが表示されます。

データ・パネルまたはフォームをレイアウトした後、フォーム内でfetchAttributeProperties()メソッドを定義することで、ADF Swingアプリケーションのパフォーマンスを向上させることができます。これにより、フォームはバッチ・モードで動作し、属性値をフェッチするようになります。

3.4 クライアント・データ・モデル参照の変更方法

ビジネス・サービス・データ・ソースへの接続に使用するデータ・モデル定義を変更するためにアプリケーション・コードを編集する必要はありません。その定義はすべて、ユーザー・インタフェース・プロジェクトのメタデータとして2つのファイルDataBindings.cpxおよびPageDef.xmlに含まれています。

これは、JDeveloperでアプリケーションをテストするためにローカル構成を使用していた後に、リモート・デプロイメント構成を使用するデータ・モデル定義に変更する場合に必要になることがあります。また、異なるビジネス・サービス・プロジェクトで定義されている完全に異なるデータ・モデルを使用することもできます。さらに、このタスクを完了するためにコードを変更する必要はありません。

ADF Swingメタデータで新しいクライアント・データ・モデル定義を参照する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトでDataBindings.cpxファイルに新しいクライアント・データ・モデル定義を追加し、選択した名前(たとえば、remotedatamodel)を覚えておきます。
詳細は、第2.6項「クライアント・データ・モデルの定義の作成方法」を参照してください。

注意:

異なるプロジェクトのパッケージのADFビジネス・コンポーネント・アプリケーション・モジュールを使用するようにデータ・モデルを変更し、その新しいアプリケーション・モジュールがセッションBean (BMT)として定義されている場合、web.xmlファイルの<ejb-ref>エントリを変更し、.cpxファイルを更新する必要があります。

2. 必要に応じて、XMLエディタでDataBindings.cpxファイルを開き、BC4JDataControl定義の属性を編集できます。

- 「ウィンドウ」→「構造」を選択し、ファイルの「構造」ウィンドウを表示します。

- 「構造」ウィンドウで、変更するデータ・コントロール・ノードを選択します。

- 「ウィンドウ」→「プロパティ」を選択し、データ・コントロール定義を表示してその属性を編集します。

3. XMLエディタでPageDef.xmlファイルを開き、「概要」タブをクリックして、古いデータ・コントロールを参照するバインディングを選択します。

4. 「プロパティ」ウィンドウで「共通」セクションを開き、ドロップダウン・リストから目的のコレクションの「データ・ソース」を選択します。その後、ドロップダウン・リストから、選択したデータ・ソースの目的の属性を選択できます。
バインディング定義内の各バインディングに対して繰り返します。

3.5 処理ハンドラでADF Swingフォームを開く方法

ADF Swingのウィザードを使用して、データバインドされた様々なコントロールが含まれているADF Swingフォームを作成できます。後で、ADF Swingフォームを1つのメイン・ウィンドウから実行する場合、次のものが含まれているADF Swingフレームを作成できます。

- ビジネス・サービス・クライアント・データ・モデル接続を作成するためのブートストラップ・コード

- ADF Swingフォームを開き、それにパネル・バインディングを渡すアクション・イベント・ハンドラ

ユーザーが、ボタンをクリックするなど、そのUI内のアクションを実行すると、イベントが発行されます。イベントは、何が起こったかを記述するオブジェクトであり、登録済のリスナーにのみ報告されます。JDeveloperによって、このコードがすべて生成されます。次の手順は、ボタンがクリックされたときにADF Swingフォームを開くために指定する必要があるコードを示しています。

ADF Swingフォームを開くアクションを定義する手順は次のとおりです。

1. フォームのビジネス・サービスへの接続を作成する空のADF Swingフレームを作成します。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。

2. Javaビジュアル・エディタで空のADF Swingフレームを開き、「ADF Swingの空のフォームの作成」ダイアログで生成されたナビゲーション・バーおよびステータス・バーを削除します。

3. 「コンポーネント」ウィンドウから空のフォームのデータ・パネルにJButtonコントロールを追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. Javaビジュアル・エディタでボタンを選択します。

5. 「プロパティ」ウィンドウで「イベント」セクションを開き、「actionPerformed」フィールドに、ボタンがクリックされるたびに実行する関数の名前を入力し、[Enter]キーを押します。
JDeveloperによって、ソース・エディタ内に関数のスタブが表示されます。

6. イベント・スタブにコードを追加し、表示するADF Swingフォームを作成し、その可視プロパティをtrueに設定します。
FrameMyNewView frame = new FrameMyNewView(getPanelBinding());frame.setVisible(true);

getPanelBinding()メソツドで、メインADF Swingフレームからパネル・バインディングを共有できます。この結果、ADF Swingフォーム間でイテレータ・バインディングが共有されます。新しいフレームが、マスター/ディテール・フレームの最初のディテールのナビゲーション・バーおよびステータス・バーと自動的に同期されます。

または

フォームとそれを開く元となったフレームを同期しない場合は、ADF Swingフォームを作成するコードを追加し、新しいパネル・バインディングを設定します。

FrameMyNewView(new JUPanelBinding(getPanelBinding().getApplicationName(),null));frame.setVisible(true);

3.6 空のADF Swingフォームにデータ・パネルをドロップする方法

現在のプロジェクトの既存のデータ・パネルを使用してADF Swingフォームを作成することも、特定のコントロールでレイアウトできる新しい空のデータ・パネルを挿入することもできます。

ADF Swingの空のフォームにデータ・パネルを追加する手順は次のとおりです。

1. Javaビジュアル・エディタで空のフォームを開き、「設計」タブをクリックします。

2. 「ウィンドウ」→「コンポーネント」を選択し、Swingコントロールのリストを表示します。

3. 「コンポーネント」ウィンドウで、ADF Swingリージョンを選択し、プロジェクト内の既存のデータ・パネルを表示します。

4. 再利用するADF Swingパネルを空のパネルにドラッグします。

5. 「コントロールの選択」ダイアログで、フォームでのデータ・パネルの処理方法を選択します。

6. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

ADF Swingフォームに追加したADF Swingパネルは、ADFバインディング・コンテナからそのデータバインディングを受け取ります。フォーム上でsetBindingContext()が呼び出されると、そのフォームのバインディング・コンテナが、パネルのバインディング・コンテナとともに作成されます。

3.7 空のSwingフォームでデータ・パネルをレイアウトする方法

JGoodiesフォーム・フレームワークで提供されているフォーム・レイアウトのレイアウト・マネージャを使用してSwingパネルをレイアウトできます。このフォーム・レイアウトは、グリッドベースでコントロールの配置および整列を高度に制御できます。他のレイアウトとは異なり、複数のグリッド・セルにまたがってコンポーネントを配置できます。

ADFデータ・パネルにフォーム・レイアウトを設定する手順は次のとおりです。

1. Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。

2. 「ウィンドウ」→「プロパティ」を選択します。

3. 「プロパティ」ウィンドウの「ビジュアル」セクションを開き、「layout」ドロップダウン・リストからフォーム・レイアウトを選択します。
詳細は、Oracle JDeveloperでのアプリケーションの開発のコンポーネントの追加に関する項を参照してください。

4. パネル・レイアウトをカスタマイズします。
詳細は、Oracle JDeveloperでのアプリケーションの開発のレイアウト・マネージャでの作業に関する項を参照してください。

3.8 ADF Swingフォームでのメソッドとパラメータとのバインディング

「データ・コントロール」パネルを使用して、ビジネス・サービスのメソッドによって定義されるアクションをユーザーが開始できるようにするボタンを挿入できます。ビジネス・サービスがADFビジネス・コンポーネントである場合、多数の標準アクションが事前定義されています(Create、Delete、Next、Previous、Commit、Rollbackなど)。

3.8.1 JavaBeanメソッドを「データ・コントロール」パネルに移入する方法

ビジネス・サービスがJavaBeanクラスである場合、publicメソッドを定義し、BeanをADFデータ・コントロールとして登録する必要があります。作成するメソッドでは、ADF Swingフォーム・ユーザーが値を指定できる引数を定義することができます。

また、「プロパティ」ウィンドウでメソッドのパラメータ値を指定することもできます。

JavaBeanメソッドを「データ・コントロール」パネルに移入する手順は次のとおりです。

1. Oracle ADFアプリケーションでアクセスするJavaBeanを定義します。
ビジネス・サービスがデータ・モデル・プロジェクトに表示されます。

2. ADFデータ・コントロールを使用してデータ・モデル・プロジェクトのビジネス・サービスを登録 します。
データ・モデル・プロジェクトで、そのビジネス・サービスとしてADFビジネス・コンポーネントを使用している場合、JDeveloperによってそのデータ・コントロールが登録されます。

3.8.2 メソッド・バインディングが含まれるADF Swingフォームを作成する方法

ADF Swingフォームを作成できる場合、メソッド・バインディングをボタンとして表示するか、「メソッド」パネルとして表示するかを選択できます。「メソッド」パネルには、各パラメータのコンポーネントおよび各メソッドの結果を表示するコンポーネントが表示されます。

メソッド・バインディングが含まれるADF Swingフォームを作成する手順は次のとおりです。

1. データ・パネルをJavaビジュアル・エディタで開きます。

2. 「データ・コントロール」パネルで、目的のカスタム・メソッドを表示するデータ・コレクションまたはデータ・コントロールの「Operations」フォルダを開きます。
「データ・コントロール」パネルの階層は、データ・コレクションの下の「Operations」フォルダ内の特定データ・コレクションに適用される操作(「Create」や「Delete」など)を表します。ビジネス・サービスをADFデータ・コントロールによってサポートする場合は、「Commit」や「Rollback」などの操作も選択できます。これらは階層の最上位ブランチの「Operations」フォルダ内にある現行ドキュメントのバインディング・コンテキストで、すべてのデータ・コレクションに適用されます。

3. 目的の操作を、開いたドキュメントまでドラッグします。
パラメータも結果もないメソッドは、アクションを開始するJButtonコンポーネントとして自動的に追加されます。メソッドにパラメータまたは戻り値がある場合、JDeveloperによって、メソッドを追加する方法を選択できるポップアップが表示されます。フォームでアプリケーション内のメソッド・バインディングをどのように表示するのかに基づいて、これらのオプションの1つを選択します。

- アクションを開始するボタンを追加する場合は、「ボタン」を選択します。メソッドへのパラメータの受渡しは、自身で行います。

- 必要に応じて、各パラメータのコンポーネントおよびメソッドの結果を表示するコンポーネントを表示する「メソッド」パネルを追加する場合は、「メソッド」を選択します。表示されるパラメータおよび結果のコントロールの選択ダイアログで、パネルに表示されるコンポーネントを選択します。

JDeveloperによって、クラス・ファイルに、JButtonまたはJPanelを操作にバインドするコードが追加されます。

4. メソッドをボタンとしてドロップし、パラメータ値を自身で指定する場合は、テキスト・フィールドをフォームに追加し、focusListenerをそのテキスト・フィールドに追加し、そのfocusLost()メソッドをデータ・パネルの.javaファイルで変更し、例3-1のコードを使用してメソッドにパラメータを渡すことができます。

例3-1 メソッドをパラメータに渡すためのコード

private void jTextField1_focusLost(FocusEvent e)   {
JUCtrlActionBinding action =
(JUCtrlActionBinding)panelBinding.getCtrlBinding(jButton1);
ArrayList arg1 = new ArrayList();
arg1.add(jTextField1.getText());
action.setParams(arg1);
}

この手順を繰り返し、メソッド・パラメータを指定するテキスト・フィールドごとにイベント・ハンドラを作成します。

3.8.3 JTableコンポーネントを使用するメソツド結果の表示に関する必知事項

「データ・コントロール」パネルから、戻り値を持つカスタム・メソッドをドロップすると、JDeveloperによって、コンポーネントをメソッド結果にバインドするように要求されます。JTableのコレクションである結果を表示することを選択すると、実行時に、Swing JTableコンポーネントによってレンダラの準備が試行されたときに、アプリケーションがNullPointerExceptionで失敗することがあります。この例外は、Integer型に対してレンダラを設定できないSwing JTableの制限が原因です(Swingでは、Number、Double、Float、DateおよびBooleanがサポートされています)。JTableをサブクラス化し、Swingでネイティブにサポートされていない型に対するデフォルト・レンダラを設定する必要があります。

たとえば、Integer用のカスタム・レンダラをインストールするには、例3-2に示すコードを使用できます。

例3-2 Integer用のカスタム・レンダラのインストール

private JTable jTable1 = new JTable() {
protected void createDefaultRenderers() {
super.createDefaultRenderers();
setDefaultRenderer(Integer.TYPE,
super.getDefaultRenderer(java.lang.Number.class));
}
}

4 データ・バインディングでの作業

この章では、ADFビジネス・コンポーネントのデータ・オブジェクトにバインドされたSwingコンテナおよびコンポーネントを作成する方法について説明します。ここでは、ADF Swingのウィザードを使用してデータバインドされたコンテナを作成する最も簡単な方法について説明します。

この章には、次のセクションがあります。

- 第4.1項「データ・バインディングでの作業について」

- 第4.2項「ADF Swingコントロールを使用したUIのナビゲーション」

- 第4.3項「ADF Swingのデータ・コンテキストに関する必知事項」

- 第4.4項「実行時の処理: パネル・バインディングの機能のしかた」

- 第4.5項「ADF Swingブートストラップ・コードに関する必知事項」

- 第4.6項「データバインドされたテキスト・フィールドにオブジェクト属性を表示する方法」

- 第4.7項「データバインドされた表またはツリー・コントロールに新しい行を作成する方法」

- 第4.8項「データバインドされた表内の列をソートする方法」

- 第4.9項「実行時の処理: コントロール・バインディングの機能のしかた」

4.1 データ・バインディングでの作業について

ADF Swingにおけるデータ・バインディングとは、バックエンド・ビジネス・サービスのデータにバインドするSwingコンテナおよびコンポーネントを作成する機能です。データ・バインディングを有効化するために、ADF Swingには、Oracle ADFモデル・レイヤーと連携する小さなAPIがあります。このAPIは、アプリケーション・ソース・コードでADF Swingブートストラップ・コードとの組合せにより公開されます。

- loadCpx()のコール: アプリケーション・メタデータ(DataBindings.cpxファイルで指定されている)をロードします。これにより、インスタンスに対するADFデータ・コントロールおよびADFバインディング・コンテキストを使用するビジネス・サービス実装インスタンス(例: ADFビジネス・コンポーネントのアプリケーション・モジュール・インスタンス)への接続が指定されます。

- setBindingContext()のコール: フレームまたはパネルからADFバインディング・コンテキストを使用できるようにします。

- createPanelBinding()のコール: Swingコンポーネント・モデルを介してビジネス・サービスに含まれているデータ・コレクションにアクセスするオブジェクトを作成します。

- ADF Swingフォームまたはパネルの個々のコンポーネントに対してADFモデルを設定するためのパネル・バインディングに対するbindUIControl()のコール。

Swingアプリケーションでのデータ・バインディングと連動させるために、各コンテナ(フレームまたはパネル)は、パネル・バインディング・オブジェクトを作成するか、その元のソースからそれを取得する必要があります。最初のパネル・バインディングを作成するフレームには、ADF Swingブートストラップ・コードも含まれており、そこで、ビジネス・サービスへの接続が作成されます。アプリケーションによって作成される後続のコンテナは、元のパネル・バインディングから連鎖しているか、関係のないデータを表示するためにそれら自体によってパネル・バインディングが作成されます。アプリケーションのデータ・ビューをどのようにパーティション化するのかによって、コンテナで新しいパネル・バインディングが設定されるのか、既存のものが取得されるのかが決まります。

- ビジネス・サービス・ビューの独立したブランチを作成する場合、アプリケーションで新しいパネル・バインディングを設定するフレームを開く必要があります。

- アプリケーションの連続したブランチに沿った同じビューを保持する場合(たとえば、マスターおよびディテール・ブランチ)、セカンダリ・コンテナはすべて、最初のフレームによって作成されたパネル・バインディング・オブジェクトを共有します。

4.1.1 ADF Swingのコンテナ

データバインドされたコンテナを作成する最も簡単な方法は、ADF Swingウィザードを使用することです(「新規ギャラリ」の「ADF Swing」フォルダを参照してください)。特に、ADF Swingのこれらの2つのウィザードを使用すると、ソース・コードに、パネル・バインディングの作成に必要なブートストラップ・コードおよびコンストラクタが含まれるようになります。

- 「ADF Swingの空のフォームの作成」ダイアログを使用して、アプリケーションによって使用されるビジネス・サービス(たとえば、ADFビジネス・コンポーネント)への接続が含まれているADF Swingパネル・バインディングを作成する空のフレームを生成します。

- 「ADF Swingの空のパネルを作成」ダイアログを使用して、新しいパネル・バインディングを作成するか、その親フレームから1つを共有するコンストラクタが含まれている空のパネルを生成します。

これらの2つのウィザードを使用するもう1つの利点は、JDeveloper内でUIデザインを簡単にドラッグアンドドロップするためのサポートです。それらは、特定のデータ・コントロール・オブジェクト(これには、ビジネス・サービスのコレクション、構造化されたオブジェクト、属性およびメソッドが含まれます)のためのブートストラップ・コードで生成されているため、JDeveloperの「データ・コントロール」パネルから挿入するSwingコンポーネントがすべて、そのデータ・コントロール・オブジェクトに含まれているどのビジネス・サービスにもアクセスできるようになります。

4.1.2 標準Javaコンテナ

ADF Swingデータ・バインディングを有効化する対象となる標準フレームまたはパネル(ADF Swingのウィザードを使用せずに生成されたもの)から開始する場合、適切なADF Swingブートストラップ・コードをメイン・フレームに追加し、次のようにセカンダリ・ウィンドウでのパネル・バインディングを処理できます。

- 親フレームとパネル・バインディングを共有する場合:
BusinessCompViewName(getPanelBinding()); frame.setVisible(true);

- 新しいフレームでそれ自体のパネル・バインディングを定義する場合:
BusinessCompViewName(new JUPanelBinding(getPanelBinding().getApplicationName(),null));frame.setVisible(true);

最初のものは、フレーム・オブジェクトを作成し、パネル・バインディングを設定します。2番目のコールは、フレームを可視にします。

4.2 ADF Swingコントロールを使用したUIのナビゲーション

ADF Swingを使用してデフォルトのマスター/ディテール・フォームを作成する場合、マスターとディテールの両方のパネルにナビゲーション・バーが作成されて配置され、それによって、ユーザーは各パネルのデータを個別にスクロールできます。または、現在フォーカスがあるパネルに反応する1つのナビゲーション・バーを作成できます。

4.2.1 ナビゲーション・バーを使用して移動する方法

ADF Swingフォームで、個別のパネルからレイアウト・パネル(ここでは、ナビゲーション・イベントがすべての子パネルに影響を与える)にナビゲーション・バーのコードを移動する必要があります。たとえば、部門および従業員のデータ・パネルからレイアウト・パネルにコードを移動できます。

移動する必要があるコードは、例4-1に似たものになります。

例4-1 ナビゲーション・バー・コード

// The declaration of the navigation bar
private JUNavigationBar navBar = new JUNavigationBar();

// The code that binds the navigation bar to the individual panel.
navBar.setModel(JUNavigationBar.getModelInstance(getPanelBinding(), "DepartmentsView", null, "DepartmentsViewIter"));

//Add the navigation bar to the panel
add(navBar, BorderLayout.NORTH);

ナビゲーション・バー・コードを移動したら、コントロール・バインディングを、マスターとディテールの両方のパネルが含まれるレイアウト・パネルに追加する必要があります。例4-2は、ナビゲーション・バーのモデルをバインドするためにレイアウト・パネルに追加するコードを示しています。

例4-2 パネルへのナビゲーション・バーのモデルのバインディング

//The declaration of the navigation bar
private JUNavigationBar navBar = new JUNavigationBar();

//Bind the model for the navigation bar to the panel
navBar.setModel(JUNavigationBar.getModelInstance(getPanelBinding(),navBar));

//Add the navigation bar to the panel
add(navBar, BorderLayout.SOUTH);
add(masterScroller, BorderLayout.NORTH);
add(detailViewPanel, BorderLayout.CENTER);

4.2.2 ツリー・ナビゲーションを使用して移動する方法

ツリー・コントロールをパネルに追加する場合、ADF Swingノード・モデルのプロパティ・エディタを使用して、ノード移入ルールを作成します。プロパティ・エディタでは、ノードの選択を処理できません。パネル内のコントロールに移入するためにノード選択イベントを処理する場合、JUTreeDefaultMouseListenerを使用して、選択したノード上のマスター・パネルとディテール・パネルを同期できます。例4-3は、リスナーをツリー・コントロールに追加する方法を示しています。

例4-3 ツリー・コントロールへのリスナーの追加

myTreeControl.addMouseListener(new JUTreeDefaultMouseListener
( panelBindingVar, new String [][] {
{ "NodeType1" , "DepartmentViewIter" }, "NodeType2" , "EmployeeViewIter" } }
)
);

4.3 ADF Swingのデータ・コンテキストに関する必知事項

ADF SwingFrameまたはJPanelによって実装されるADF SwingPanelインタフェースにより、ADF Swingアプリケーションで次のことを実行できます。

- データバインドされたパネル間(データ・パネル間のチェーン化とも呼ばれる)で、一貫したデータ・コンテキストを保持する

- データバインドされたSwingコントロールを介してデータにアクセスする

設計時、ADF Swingアプリケーションに追加する各データ参照パネルには、UIコントロールとビジネス・サービスの行セット・イテレータ間の相互作用をマーシャリングするためのコンテキストが、フレームまたはそれを含んでいるパネル(マスター/ディテール・レイアウト・パネルなど)に作成されたパネル・バインディング・オブジェクトから渡されます。ADF Swingにおけるデータ参照パネルをチェーニングする機能は、追加のコードを記述する必要がない状態で提供されています。たとえば、ウィザードによって生成されるデータ参照パネルPanelDeptViewおよびPanelEmpView1は、各JPanelがADF SwingPanelインタフェースのsetPanelBinding()およびgetPanelBinding()メソッドを実装している場合、パネル・バインディング(JUPanelBinding)のインスタンスを介して同じデータ・コンテキストを共有します。

このパネル・バインディングを作成するフレームまたはパネルがある場合、ADF Swingによって、既存のパネル・バインディング・オブジェクトを共有するか、新しいものを作成する新しいデータ参照パネルを追加することで、アプリケーションを作成できます。

その後、JDeveloperの「データ・コントロール」パネルを使用して、データバインドされたコントロールを1つずつデータ・パネルに追加できます。Swingコンポーネントのレベルで、これにより、そのコントロールのdocumentまたはmodelプロパティにADF Swingコントロール・モデルが指定されることによって、データ・バインディングが設定されます。実行時に、データ・パネルの各コントロールは、そのコントロールのsetModel()またはsetDocument()メソツドの引数としてのパネル・バインディング・オブジェクトを介してデータバインドされます。

4.4 実行時の処理: パネル・バインディングの機能のしかた

データバインドされたパネルによってパネル・バインディングがどのように作成され、使用されるのかを理解するために、アプリケーションを実行したときに何が行われるのかを、ADF Swingフレームから開始し、次のADF Swingコードが実行されたとして考えてみましょう。

1. main()メソッドは、アプリケーションをブートストラップします。これにより、バインディング・コンテキストが開始され、ADFデータ・コントロールが、DataBindings.cpxファイルのエントリに基づいてロードされます。次に、初期化されたADFモデル・オブジェクトが含まれるバインディング・コンテキストが、パネル・バインディングに渡され、ADFデータ・バインディングが作成されます。
詳細は、第4.5項「ADF Swingブートストラップ・コードに関する必知事項」を参照してください。

2. フレームは、アプリケーション・オブジェクトを取るコンストラクタを介して初期化されます(前述の例では、FrameDeptViewEmpView1)。フレームを初期化すると、複数のデータ・コントロールのデータにバインドされているコンポーネントが含まれている可能性があるADFモデル定義に基づいて、パネル・バインディング・オブジェクト(JUPanelBinding)が生成されます。パネル・バインディングの作成は、Swingコンポーネントに対するデータ・バインディングおよびデータ・パネルのチェーニングを可能にするADF Swingの重要な機能です。

3. フレームまたはアプレット・クラスによって、レイアウト・パネル(前述の例では、MDPanelDeptViewEmpView1)が初期化され、setBindingContext()メソッドを使用して、新しいレイアウト・パネルにパネル・バインディングが設定されます。
詳細は、第2.3項「ADF Swingフォーム作成時の処理内容」を参照してください。

4. レイアウト・パネルのjbInit()メソッドで、データ参照(子)パネルが作成されます。この場合、ADF Swingによって、子データ・パネル(前述の例では、PanelDeptViewおよびPanelEmpView1)をバインドするために共有バインディング・コンテキストが使用されます。

5. コントロールの指定されたADF Swingモデルを使用して、コントロールから属性へのデータ・バインディングが行われます。(このバインディング情報は、バインディング・コンテナXMLメタデータに格納されます。)

6. コントロール・バインディングによって、イベントが処理され、UIコントロールのデータが移入され、更新されます。
詳細は、第4.9項「実行時の処理: コントロール・バインディングの機能のしかた」を参照してください。

4.5 ADF Swingブートストラップ・コードに関する必知事項

ナビゲータでフレーム・クラスを選択し、「実行」を選択すると、main()メソッドによって、アプリケーションがブートストラップされます。これにより、バインディング・コンテキストが開始され、データ・コントロールが、DataBindings.cpxファイルのエントリに基づいてロードされます。次に、初期化されたデータ・コントロールが含まれるバインディング・コンテキストが、パネル・バインディングに渡され、ADFデータ・バインディングが作成されます。

例4-4は、HRスキーマからのEmployeesおよびDepartmentsの各表から選択された例を使用して、ADF Swingフォームの作成ウィザードによって作成されたブートストラップ・コードを示しています。

例4-4 フォームの作成ウィザードによって作成されたブートストラップ・コード

// bootstrap application
JUMetaObjectManager.setBaseErrorHandler(new JUErrorHandlerDlg());

// Lookup the *.cpx file and create all data controls listed in this file.
JUMetaObjectManager mgr = JUMetaObjectManager.getJUMom();

// Use the definition classes provided by ADF Swing. Change only if you do not want to use custom DefClasses.
mgr.setJClientDefFactory(null);

// Create a new binding context that extends java.util.Hashtable.
BindingContext ctx = new BindingContext();

// Get user connection information if available. If not, display logon dialog.
ctx.put(DataControlFactory.APP_PARAM_ENV_INFO, new JUEnvInfoProvider());

// Set locale to the default locale of the JVM.
ctx.setLocaleContext(new DefLocaleContext(null));

// Load data binding container data binding file.
HashMap map = new HashMap(4); map.put(DataControlFactory.APP_PARAMS_BINDING_CONTEXT, ctx);
mgr.loadCpx("mypackage.DataBindings.cpx", map);

// Get handle to the ADF Business Components application module. The code lines
// below are added only when using the ADF Swing Form wizard. Declaratively creating
// the frame, starting with an empty form wizard does not add the following lines.
DCDataControl app = (DCDataControl)ctx.get("model_AppModuleDataControl");
app.setClientApp(DCDataControl.JCLIENT);

// Despite the following line of code, attribute sets and fetches are normally
// performed in one batch operation. This requires only one network round
// trip. Attributes that aren't needed are not loaded to the client. The code
// line below is added only when using the ADF Swing Form wizard. Declaratively creating
// the frame, starting with an empty form wizard does not add the following lines.
app.getApplicationModule().fetchAttributeProperties(new String[] {"DepartmentsView1", "EmployeesView3"}, new String[][] {{"DepartmentId", "DepartmentName" }, {"EmployeeId", "FirstName", "LastName" "DepartmentId" }}, null);

// Initialize application root class.
FormDepartmentsView1EmployeesView3 frame = new FormDepartmentsView1EmployeesView3();

// Set binding context to the frame.
frame.setBindingContext(ctx);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();

フレームは、デフォルトでは引数を想定していない、そのコンストラクタによって初期化されます。アプリケーションのバインディング・コンテキストは、フレームのsetBindingContext()メソッドに渡されます。

フレームを初期化すると、複数のデータ・コントロールのデータにバインドされるコンポーネントが含まれている可能性があるOracle ADFモデル定義に基づいて、パネル・バインディング・オブジェクト(JUPanelBinding)が生成されます。パネル・バインディングの作成は、Swingコンポーネントに対するデータ・バインディングおよびデータ・パネルのチェーニングを可能にするADF Swingの重要な機能です。

データ・パネルまたはフォームをレイアウトした後、フォーム内でAttributeProperties()メソッドを定義することで、ADF Swingアプリケーションのパフォーマンスを向上させることができます。これにより、フォームはバッチ・モードで動作し、属性値をフェッチするようになります。詳細は、第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」を参照してください。

4.6 データバインドされたテキスト・フィールドにオブジェクト属性を表示する方法

データバインドされたテキスト・フィールドを使用してオブジェクトの属性値(アドレス・オブジェクトによって定義されるものなど)を表示する場合、フィールドに属性値は表示されません(かわりに静的テキストが表示されます)。

オブジェクト属性にテキスト・フィールドをバインドすると、バインドされたオブジェクトのイテレータ・バインディングに対して問合せが強制的に再実行されることで、「ADF Swing」パネルに値を適切に表示できます。

オブジェクトのイテレータ・バインディングに対してexecuteQuery()を強制するには、このメソッド・コールを、パネルでjbInit()が実行された後に追加します。ここで、Streetは、オブジェクト属性バインディングの名前に置き換えられます。

panelBinding.findControlBinding("Street").getIteratorBinding().
executeQuery();

同じオブジェクトのすべての属性値を再フェッチするようにイテレータ・バインディングを強制するには、オブジェクト・ドメイン属性(Streetなど)の1つに対してexecuteQuery()をコールすることのみが必要です。

4.7 データバインドされた表またはツリー・コントロールに新しい行を作成する方法

ビジネス・サービスがデータ・コレクションに対する作成操作をサポートしている場合、ADF Swingパネルでこの操作を使用して、データバインドされた表またはツリー・コントロールに新規行を表示できます。作成および挿入アクション・バインディングにバインドされている「作成」ボタンをユーザーがクリックすると、新しい行が表示されます。この操作によって、1つのステップで行が作成および挿入されるため、この操作は、ユーザーによるコンポーネントのインプレース編集に理想的です。

注意:

「データ・コントロール」パネルには、この操作が「作成」として表示されますが、アクション・バインディング・エディタがCreateInsertに設定されます。この動作は、Webアプリケーションの場合は異なります。

作成操作を使用して行を挿入するADF Swingのバインドされたコントロールを作成する手順は次のとおりです。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、UIコンポーネントが表示する属性が含まれているコレクション・ノードを選択します。これは、コントロールによってその行が追加されるコレクションです。ドロップダウン・リストで、新しい行を表示する目的のUIコンポーネントを選択します。

注意:

そのデータ・コレクションとして、ディテール・コレクション(別のコレクション・ノードの子としてデータ・コントロール階層に表示される)を選択することはできません。これにより、イテレータ・バインディングによるナビゲーションの実行が防止されます。

3. コレクションを、開いているADF Swingパネルにドラッグします。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

ヒント:

必要に応じて、パネルに、ナビゲーション・ボタンを表示し、ユーザーがコレクションを参照できるようにすることができます。詳細は、第7.8項「JUNavigationBarコントロールの使用方法」を参照してください。

4. 行を作成する操作を挿入するには、前に選択したコレクションの操作フォルダで「作成」を選択し、ドロップダウン・リストから「ボタン」を選択します。

5. ボタンを、開いているADF Swingパネルに挿入します。

注意:

「データ・コントロール」パネルから「作成」をドラッグすると、ボタンのアクション・バインディングがCreateInsertに設定されます。この動作は、Webアプリケーションの場合は異なります。

4.8 データバインドされた表内の列をソートする方法

ADFイテレータ・バインディングを使用して、データバインドされたSwing表を作成する場合、表の列のデータを表示するソート基準(昇順または降順)を指定できます。1つ以上の列をソート基準として使用し、これらの列ごとにソートの優先度を指定できます。たとえば、従業員表をソートする場合、姓を第1ソート基準、名を第2ソート基準として選択できます。この例では、2人以上の従業員が同じ姓を持っているために、指定された順序で名前でソートする必要がある場合に、2番目のソート基準が役立ちます。

データバインド表の列をソートする場合、表に対するイテレータ・バインディングを使用します。

ADFイテレータ・バインディングにバインドされた表の列をソートする手順は次のとおりです。

1. Javaビジュアル・エディタで、ソートする表が含まれるフォームまたはパネルを右クリックし、「ページ定義に移動」を選択します。

2. ページ定義エディタの概要の「実行可能ファイル」リストでイテレータ・バインディングをダブルクリックします。

3. 「イテレータ・バインディングの編集」ダイアログで、「ソート基準」タブをクリックします。

4. 属性を選択し、ソートを昇順で実行するのか降順で実行するのかを選択します。
属性が表に対するソート基準でない場合は、「ソートなし」が選択されたままにします。

5. 上矢印または下矢印ボタンを使用して、属性のソート優先度を変更します。
リスト内のソート基準属性を上に移動すると、ソート優先度が高くなります。これは、その属性が、リストの下方に表示されているソート基準属性より前にソートされることを意味します。

4.9 実行時の処理: コントロール・バインディングの機能のしかた

データ参照パネルが初期化された後、レイアウト・パネルによって、パネル・バインディングに対してexecuteIfNeeded()がコールされ、ADFビジネス・コンポーネント・データ・ソースに対する問合せが実行されます。

4.9.1 コントロールへのデータの移入

executeIfNeeded()メソッドによって、問合せがビュー・オブジェクトに対して実行されたかどうかが判別されます。されていない場合、このメソッドによって、それに対してexecuteQuery()がコールされます。この実行された問合せによって、データベースのデータがキャッシュに送られ、ADFビジネス・コンポーネント行セット・リスナー・イベントが起動されます。これらのうちの最初のものがRowSetListener.rangeRefreshedイベントです。このイベントは、イテレータ・バインディングによって取得されます(それよって、RowSetListenerが実装され、それ自体がリスナーとして登録されたため)。これにより、その範囲の行が取得され、コントロール・バインディングに対してupdateValuesFromRows()がコールされます。コントロール・バインディングは、それらの行からデータを取り出し、Swing APIを使用してそれらをコントロールに割り当てます。その結果、Swing APIによって、パネルUIがそのデータで更新されます。

4.9.2 コントロールを介したデータの更新

ユーザーとADF Swingバインドされたコントロールとの相互作用により、ADFビジネス・コンポーネントによるデータの更新が行われることがあります。たとえば、テキスト・フィールド(textFieldDname)の場合、ユーザーがそのテキスト・フィールドのコンテンツを編集してそのコントロールから移動すると(generating focusLostイベント)、ADF Swingにそのイベントが通知されます。その結果、ADF Swingは、更新されたデータをコントロールから取得し、行に対してsetAttribute()をコールします。

5 ADFバインディングのカスタマイズ

この章では、ADFモデル・バインディング・エディタを使用してADF Swingアプリケーションのコントロール・バインディングをカスタマイズする方法について説明します。コントロールは、ADFバインディングを使用してデータ・モデルにバインドされます。「データ・コントロール」パネルからコントロールを挿入するときに、JDeveloperによってADFバインディングが作成されます。

この章の内容は次のとおりです。

- 第5.1項「ADFバインディングのカスタマイズについて」

- 第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」

- 第5.3項「ADFアクション・バインディングのカスタマイズ方法」

- 第5.4項「ADF属性バインディングのカスタマイズ方法」

- 第5.5項「ADF配列コンボ・ボックス・バインディングのカスタマイズ方法」

- 第5.6項「ADFブール・バインディングのカスタマイズ方法」

- 第5.7項「ADFバインディングされた範囲バインディングのカスタマイズ方法」

- 第5.8項「ADFフォーマット済テキスト・フィールド・バインディングのカスタマイズ方法」

- 第5.9項「ADFイテレータ・バインディングのカスタマイズ方法」

- 第5.10項「ADFリスト・バインディングのカスタマイズ方法」

- 第5.11項「列挙モードのADFリスト・バインディングのカスタマイズ方法」

- 第5.12項「LOVモードのADFリスト・バインディングのカスタマイズ方法」

- 第5.13項「ADF LOVボタン・バインディングのカスタマイズ方法」

- 第5.14項「LOVダイアログに関する必知事項」

- 第5.15項「ADFスクロール・バインディングのカスタマイズ方法」

- 第5.16項「ADF表バインディングのカスタマイズ方法」

- 第5.17項「ADFツリー・バインディングのカスタマイズ方法」

5.1 ADFバインディングのカスタマイズについて

「データ・コントロール」パネルからコントロールを挿入する場合、コントロールはADFバインディングを使用してデータ・モデルにバインドされます。そのため、バインディング・エディタを使用してバインディングを編集できます。

ADF Swingは、SwingコントロールとADFビジネス・コンポーネント・ビュー・オブジェクトの行セット・イテレータとの間の相互作用のマーシャリングを担当するSwingコントロールのモデル・オブジェクトを提供します。SwingモデルのADF Swing実装は、コントロール・バインディングと呼ばれます。

ADF SwingアプリケーションのUIコンポーネントは、ADFビジネス・コンポーネント・ビュー・オブジェクトにバインドされます。たとえば、ADF Swingのデータバインドされたパネルに、名前および姓のテキスト・フィールド(JTextField)があり、ユーザーがビジネス・コンポーネント属性値を表示および変更できるとします。

指定されたSwingコントロールに使用されるコントロール・バインディングのタイプは、そのコントロールによって実行されるアクションによって異なります。場合によっては、コントロールは、異なる相互作用を定義する複数のコントロール・バインディングと連動します。表5-1は、ADF Swingによって様々なSwingコントロールに対して定義されているバインディングを示しています。

表5-1 ADF Swingのコントロールに対するコントロール・バインディング

ADFコントロール・バインディング

Swingコントロール

アクション・バインディング

ボタン

属性バインディング

Label For

パスワード

テキスト・エリア

テキスト・フィールド

テキスト・ペイン

編集ペイン

配列コンボ・ボックス・バインディング

JUArrayComboBox

ブール・バインディング

チェック・ボックス

バインディングされた範囲バインディング

プログレス・バー

スクロール・バー

スライダ

フォーマット済テキスト・フィールド・バインディング

フォーマット済テキスト・フィールド

イテレータ・バインディング

ナビゲーション・バー

リスト・バインディング

コンボ・ボックス

リスト

ラジオ・ボタン・グループ

スピナー

LOVモードでのリスト・バインディング

スピナー

ボタンLOVバインディング

ボタンLOV

スクロール・バインディング

スクロール・バー

スライダ

表バインディング

表

ツリー・ノード・バインディング

ツリー

グラフ・バインディング

JUSingleTableGraphBinding

JUMasterDetailTableGraphBinding

5.2 ADF SwingパネルのADFバインディングのカスタマイズ方法

JDeveloperのコントロール・バインディング・エディタを使用して、データ・コントロール・パネルを使用して作成した任意のデータ・バインドUIコンポーネントの特性をカスタマイズできます。

注意:

データ・バインディングに変更を加えると、データ・バインディングと、データを表示するために使用されるUIコンポーネントの間で矛盾が生じることがあります。たとえば、表のデータ・バインディングを編集し、属性値の列を1つ減らして表示するには、Javaビジュアル・エディタを使用してその列をソースから削除する必要があります。

Javaビジュアル・エディタからUIコンポーネントのバインディングをカスタマイズする手順は次のとおりです。

1. 「データ・コントロール」パネルを使用して、「Java」パネルにUIコンポーネントを挿入します。
詳細は、第2.11項「「データ・コントロール」パネルからのADF Swing編集フォームの作成方法」を参照してください。

2. Javaビジュアル・エディタにそのUIコンポーネントを表示したまま、そのコンポーネントを右クリックし、「バインディングの編集」を選択してバインディング・エディタを表示します。
Javaビジュアル・エディタの「バインディング」タブをクリックし、「バインディング」リストでバインディングをダブルクリックすることもできます。

5.3 ADFアクション・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入したButton UIコントロールに対するADFアクション・バインディングをカスタマイズできます。

アクション・バインディングによりユーザーは、特定のビジネス・サービスの属性およびコレクションでアクションを開始できます。アクションは、ビジネス・サービスのクラス・メソッドによって定義され、「データ・コントロール」パネルに表示される「操作」フォルダに表示されます。

「データ・コントロール」パネルを使用してアクションをボタンとして挿入する場合、アクション・バインディング・エディタに、対応する選択内容が表示されます。アクション・バインディング・エディタを使用して、データ・コレクションおよびアクションを変更できます。また、アクションを現在のドキュメントのバインディング・コンテキストのすべてのデータ・コレクションに適用する場合は、データ・コントロールおよび対応するアクションを選択できます。

注意:

カスタム・メソッドでパラメータを使用する場合、パラメータの実際の値は「プロパティ」ウィンドウで指定できます。アクション・バインディング・エディタでは、メソッドの引数の値の入力はサポートされていません。

特定のビジネス・サービスでは、そのビジネス・サービスのADFデータ・コントロールで標準アクションがサポートされています。たとえば、ADFビジネス・コンポーネントでは次の標準アクションを使用できます。

- データ・コントロールのバインディング・コンテキストで、すべてのバインドされたデータ・コレクションに対する変更のコミットまたはロールバック

- データ・コレクションの範囲内で先頭、次、前、または最後の行への移動

- 行の作成または現在の行の削除

- すべての行におけるデータ・コレクションのキャッシュからのデータのリセット

- データ・コレクションの問合せを実行してデータベースから最新データを取得

- データ・コレクションへの問合せの開始

- データ・コレクションから現在の行を取得

アクションが開始されると、バインドされたデータ・コレクションがすぐに更新されます。このアクション・バインディングと同じデータ・コレクションを使用するすべてのコントロール・バインディングを通じて、変更内容がUIに反映されます。

アクション・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、データ・コレクションまたはデータ・コントロールの「Operations」フォルダを開きます。

注意:

「データ・コントロール」パネルの階層は、データ・コレクションの下の「Operations」フォルダ内の特定データ・コレクションに適用される操作(「Create」や「Delete」など)を表します。ビジネス・サービスをADFデータ・コントロールによってサポートする場合は、「Commit」や「Rollback」などの操作も選択できます。これらは階層の最上位ブランチの「Operations」フォルダ内にある現行ドキュメントのバインディング・コンテキストで、すべてのデータ・コレクションに適用されます。

3. 目的の操作を、開いたドキュメントまでドラッグします。
JDeveloperによってコードがクラス・ファイルに追加され、コンポーネントが操作にバインドされます。

4. そのコントロール用のアクション・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 「データ・コレクション」リストで、アクションを実行するコレクションまたはデータ・コントロールを選択します。
現在のドキュメントのバインディング・コンテキストで、すべてのデータ・コレクションに適用される操作(「Commit」や「Rollback」など)を選択する場合は、ルート・データ・コントロール・ノードの下の「Operations」フォルダを開きます。

注意:

データ・コレクションでの処理結果を表示するには、データ・パネルに別のUIコントロールを追加します。このコントロールは、アクション・バインディングと同じデータ・コレクションへのコントロール・バインディングを設定するだけで、UIに処理が反映されます。

6. 選択したデータ・コレクションで実行するアクションの「操作」を選択します。

7. CommitやRollbackなどのカスタム・メソッドを選択した場合、「イテレータ」は空のままにする必要があります。これらは、ADFデータ・コントロールに対するアクションであり、イテレータは必要ないためです。
「イテレータ」リストで、選択したデータ・コレクションにアクセスするため、すでに指定したイテレータを表示している場合は、選択を変更しないでおきます。また、ビジネス・サービス・データ・コレクション(「Next」、「Next Set」、「Previous」、「Previous Set」など)によって提供される事前定義済のアクションの1つを選択している場合は、「新規」をクリックしてイテレータを生成し、ドロップダウン・リストに表示されるようにします。

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

9. 「プロパティ」ウィンドウを開き、メソッド・パラメータ値を定義します。
または、ユーザーがメソッドのパラメータを指定できるADF Swingフォームを作成することもできます。詳細は、第3.8項「ADF Swingフォームでのメソッドとパラメータとのバインディング」を参照してください。

JDeveloperはjbInit()メソッド内にsetModel()メソッドを追加して、アクション・バインディングを生成します。例5-1は、「データ・コントロール」パネルからボタンを挿入した後、メタデータを指定するためにDataControlIdを参照するメソッドを示しています。

例5-1 ボタンを挿入した後にDataControlIdを参照するメソッド

myButton.setModel((ButtonModel)panelBinding.bindUIControl("DataControlId", myButton));

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

注意:

カスタム・メソッド引数定義がある場合は、「プロパティ」ウィンドウを使用してその値を指定するまで、未定義として表示されます。

デフォルトで、同じメソッド用に2回以上アクション・バインディングを生成すると、メソッドの戻る場所が同じになります。つまり、同じメソッドに対して一意のアクション・バインディングを生成する場合は、ReturnName属性を編集して、各バインディングに対して一意の名前を指定する必要があります。通常は、同じアクション・バインディングの重複使用については、場所を同じままにします(この場合、各使用ごとに異なるパラメータ値が指定されます)。これにより、バインディング・コンテキスト内のすべてのバインドされたコントロールが、同じ戻り名の下にある結果を検索できます。

5.4 ADF属性バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するこれらの基本的なUIコンポーネントに対してADF属性バインディングを設定できます。

- パスワード・フィールド: ユーザーによって入力される属性値をマスクします。

- テキスト・エリア: 複数行でプレーン・テキストを表示します。

- テキスト・フィールド: 単一行でプレーン・テキストを表示します。

- JUImage: BLOBまたはOrdMedia型の属性を表示します。

- JULabel: 属性値をラベルとして表示します。

- ラベル: ADFビジネス・コンポーネント属性用に定義されたコントロール・ヒント・ラベルを表示します。

ADF属性バインディングを、これらのUIコンポーネントに対して設定し、様々な種類のコンテンツ(テキスト以外)を表示できます。

- 編集ペイン: 編集可能な様々な種類のコンポーネントを表示します。

- テキスト・ペイン: 様々な種類のコンポーネントを表示します。これは編集できません。

属性バインディングの動作は、使用するコントロールのタイプによって異なります。ユーザーは、データ・コレクションで定義される単一の属性の値を表示、または場合によっては編集できます。属性バインディング・エディタを使用して、データ・コレクションと属性を選択します。

注意:

ADFビジネス・コンポーネント・プロジェクトでは、属性にコントロール・ヒントを設定することによって属性値を更新可能にできます。その場合、ユーザーは、更新可能な属性の値を直接編集できます。

属性バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、空のADF Swingパネルの生成に関する項を参照してください。

2. 「データ・コントロール」パネルで、表示する目的の属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. 子の追加ポップアップ・リストから、開いているドキュメントに追加するUIコンポーネントを選択します。
編集中のドキュメントに新しいUIコンポーネントが表示されます。

4. コンポーネントの属性バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 属性バインディング・エディタで、表示する属性が含まれる「データ・ソース」を選択します。

6. 「属性」リストから、コントロールの値として表示する属性を1つ選択します。

7. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前選択していた属性が削除されます。イテレータの選択を変更する前に、選択されていた元の属性を記録しておく必要があります。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-2は、「データ・コントロール」パネルからテキスト・フィールドを挿入した後に作成されるメソッドを示しています。

例5-2 属性バインディングのためのモデル・メソッドの設定

myTextField.setDocument((Document)panelBinding.bindUIControl("DataControlId", myTextField));

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

5.5 ADF配列コンボ・ボックス・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するJUArrayComboBox UIコントロールに、ADF配列コンボ・ボックス・バインディングを設定できます。

配列コンボボックス・バインディングにより、ユーザーは、配列を指定する属性によって定義されるリストから表示される値を表示、場合によっては編集できます。配列バインディング・エディタを使用して、データ・コレクションと属性を選択します。

注意:

ADFビジネス・コンポーネント・プロジェクトでは、属性にコントロール・ヒントを設定することによって属性値を更新可能にできます。その場合、ユーザーは、更新可能な属性の値を直接編集できます。

配列コンボボックス・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、表示する属性を、開いているフォームまたはパネルにドラッグします。
属性は、データ・モデル・プロジェクト内でタイプoracle.jbo.domain.arrayとしてマップされているビジネス・サービス・データ・コレクションの属性にする必要があります。

3. 子の追加ポップアップ・リストから、「JUArrayComboBox」を選択します。
編集中のドキュメントに新しいUIコンポーネントが表示されます。

4. そのコンポーネント用の配列コンボ・ボックス・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 配列コンボ・ボックス・バインディング・エディタで、表示する属性が含まれる「ベース・データソース」を選択します。

6. 「属性の表示」リストから、コンボ・ボックス・コントロールの値を表示する配列型の属性を1つ選択します。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-3は、「データ・コントロール」パネルからJUArrayComboBoxを挿入した後に作成されるメソッドを示しています。

例5-3 配列バインディングのためのモデル・メソッドの設定

jUArrayComboBox.setArrayBinding((JUDefaultControlBinding)panelBinding.
bindUIControl("DataControlId", jUArrayComboBox));

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

5.6 ADFブール・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するチェック・ボックスUIコンポーネントに対してADFブール・バインディングを設定できます。

ブール・バインディングにより、ユーザーはコンポーネントを選択し、コンポーネントの選択状態に基づいてデータ・コレクションの属性を更新できます。ブール・バインディング・エディタを使用して、コンポーネントの対象となるデータ・コレクションと属性を選択し、コンポーネントの選択状態に対応する値(たとえば、選択されている場合はtrue, 選択されていない場合はfalse)を指定します。適切な値を指定するには、バインドされた属性に指定される値を把握しておく必要があります。

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

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、表示する属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. 子の追加ポップアップ・リストから、「チェックボックス」を選択します。
編集中のドキュメントに新しいUIコンポーネントが表示されます。

4. コンポーネントのブール・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 「ベース・データソース」リストで、更新する属性が含まれるデータ・コレクションを選択します。

6. 「属性」リストから、値リストに表示する属性を選択します。

7. リスト・バインディングから値を提供する場合は、ドロップダウン・リストから「サーバー・リスト・バインディング名」を選択します。

8. 「選択状態の値」フィールドで、ユーザーがそのコントロールを選択したときに、モデルで属性の更新に使用される値を入力します。

9. 「選択解除状態の値」フィールドに、ユーザーが表示されるコントロールの選択を解除した場合に、モデルで属性の更新に使用される値を入力します。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-4は、「データ・コントロール」パネルからチェック・ボックスを挿入した後に作成されるメソッドを示しています。

例5-4 ブール・バインディングのためのモデル・メソッドの設定

myCheckbox.setModel((ButtonModel)panelBinding.bindUIControl("DataControlId", myCheckbox));

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

5.7 ADFバインディングされた範囲バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入する次のUIコントロールに、ADFバインディングされた範囲バインディングを設定できます。

- プログレス・バー

- スクロール・バー

- スライダ

バインドされた範囲のコントロール・バインディングの動作は、使用するコントロールのタイプによって異なります。ユーザーは、データ・コレクションで定義される単一の属性の値を表示、または場合によっては編集できます。バインドされた範囲バインディング・エディタを使用してデータ・コレクションおよび属性を選択し、使用可能な値の範囲を定義します。適切なレンジを指定するには、バインドされた属性に指定される値を把握しておく必要があります。

注意:

ADFビジネス・コンポーネント・プロジェクトでは、属性にコントロール・ヒントを設定することによって属性値を更新可能にできます。その場合、ユーザーは、更新可能な属性の値を直接編集できます。

範囲バインディングを設定する手順は次のとおりです。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、表示する目的の属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. コントロール用のバインディングされた範囲バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. バインディングされた範囲バインディング・エディタで、表に表示する属性が含まれる「ベース・データソース」を選択します。

6. 「属性」リストから、コントロールの値として表示する属性を1つ選択します。

7. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前選択していた属性が削除されます。イテレータの選択を変更する前に、選択されていた元の属性を記録しておく必要があります。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

8. プログレス・バー、スライドおよびスクロール・バー・コントロールの場合は、「最小表示値」および「最大表示値」を指定できます。これらの値は、コントロールでサポートされる最初と最後の値です。

9. スライダおよびスクロールバー・コントロールでは、「増分値」または目盛りの間隔を指定できます。各目盛りは、バインドされている属性にユーザーが適用できる値を表しています。

注意:

スライダおよびスクロール・バーでは、増分値と選択された目盛りの数の積にコントロールの最小値を足して、属性値が算出されます。たとえば、最小値が20、増分値が10で、ユーザーがコントロールで3番目の目盛りを選択した場合、属性値は20+(10×3)で50になります。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-5は、「データ・コントロール」パネルからスライダを挿入した後に作成されるメソッドを示しています。

例5-5 バインディングされた範囲バインディングのためのモデル・メソッドの設定

mySlider.setModel((BoundedRangeModel)panelBinding.bindUIControl("DataControlId", mySlider));

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

5.8 ADFフォーマット済テキスト・フィールド・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するフォーマット済編集フィールドUIコンポーネントに対してADFフォーマット済テキスト・フィールド・バインディングを設定できます。

フォーマット済テキスト・フィールド・バインディングにより、ユーザーはデータ・コレクションにより定義される単一の属性値を表示および編集できます。フォーマット済テキスト・フィールド・バインディング・エディタを使用して、データ・コレクションおよび属性を選択します。このエディタでは、特定の書式マスクが適用されてバインドされた属性の値を表示するフォーマッタも選択できます。

注意:

ADFビジネス・コンポーネント・プロジェクトでは、属性にコントロール・ヒントを設定することによって属性値を更新可能にできます。その場合、ユーザーは、更新可能な属性の値を直接編集できます。

フォーマット済テキスト・フィールド・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、表示する属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. 目的のコントロール用のフォーマット済テキスト・フィールド・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. フォーマット済テキスト・フィールド・バインディング・エディタの最上位のドロップダウン・リストで「属性」を選択し、表示する属性が含まれている「データソース」を選択します。

6. 「属性」リストから、コントロールの値として表示する属性を1つ選択します。

7. 最上位のドロップダウン・リストで「フォーマット」を選択し、使用する「フォーマッタ」を選択します。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-6は、「データ・コントロール」パネルからフォーマット済編集フィールドを挿入した後に作成されるメソッドを示しています。

例5-6 フォーマット済テキスト・フィールド・バインディングのためのモデル・メソッドの設定

jFormattedTextField.setDocument((Document)panelBinding.bindUIControl("DataControlId", jFormattedTextField));

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

5.9 ADFイテレータ・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するナビゲーション・バーUIコントロールに、ADFイテレータ・バインディングを設定できます。

「NavigationBar」コントロールでイテレータ・バインディングを使用して、データ・コレクションで現在のデータ・オブジェクトの位置を管理します。ユーザーがナビゲーション・バーのボタンをクリックすると、データ・オブジェクトの位置が変化し、同じデータ・コレクションにバインドされている他のインジケータ・コントロールはすべて更新されます。

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

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、移動対象のデータ・コレクションを、開いているフォームまたはパネルにドラッグします。

3. 続いて、「NavigationBar」コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-7は、「データ・コントロール」パネルからナビゲーション・バーを挿入した後に作成されるメソッドを示しています。

例5-7 イテレータ・バインディングのためのモデル・メソッドの設定

jUNavigationBar.setModel(JUNavigationBar.createViewBinding(panelBinding, jUNavigationBar, "SelectedDataCollection", null, "IteratorId"));

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

イテレータで表示する行数を修正するには、次のようにします。

1. 「アプリケーション」ウィンドウで、範囲サイズを制限するコンポーネントが含まれているデータ・パネルを右クリックし、「開く」を選択します。

2. Javaビジュアル・エディタで、「バインディング」タブをクリックし、「実行可能ファイル」リストから、ナビゲーション・バーに対応するイテレータを選択し、「編集」をクリックします。
多くの場合、「バインディング」リストでコントロール・バインディングを選択し、「実行可能ファイル」リストで対応するイテレータを特定できます。ナビゲーション・バーは、コントロール・バインディングを必要としないため、例外です。

3. 「プロパティ」ウィンドウで「共通」セクションを開き、RangeSize値を編集し、[Enter]キーを押します。
デフォルトの値である10行から、この値を増やせます。

注意:

-1および0という値には特定の意味があります。値-1の場合、使用可能なオブジェクトすべてがコレクションから返されます。値0の場合、コレクションがデータソースから取得を行うために収容しているのと同じ数のオブジェクトが返されます。

ADFイテレータ・バインディングにバインドされた表の列をソートする手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ソートする表が含まれているデータ・パネルを右クリックし、「開く」を選択します。

2. Javaビジュアル・エディタで、「バインディング」タブをクリックし、「実行可能ファイル」リストから、表がバインドされているデータ・コレクションのイテレータを選択し、「編集」をクリックします。
多くの場合、「バインディング」リストでコントロール・バインディングを選択し、「実行可能ファイル」リストで対応するイテレータを特定できます。ナビゲーション・バーは、コントロール・バインディングを必要としないため、例外です。

3. 「イテレータ・バインディングの編集」ダイアログで、「ソート基準」タブをクリックし、矢印ボタンを使用して、表内の列のソート順序を変更します。

5.10 ADFリスト・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するリストUIコントロールに、ADFリスト・バインディングを設定できます。

リスト・バインディングにより、ユーザーは、データ・コレクションからの属性値で構成されるリストを表示できます。リスト・バインディング・エディタを使用して、表示するデータ・コレクションおよび属性を選択します。

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

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

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

3. リスト・コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

注意:

「データ・コントロール」パネルを使用して、JListコントロールをADF Swingパネルまたはフォームにドロップすると、最初は、リストに選択したコレクションのすべての属性が表示されます。表示する属性のリストを修正するには、リスト・バインディング・エディタを使用します。

4. コントロール用のリスト・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. リスト・バインディング・エディタで、リストに表示する属性が含まれているベース・データ・コレクションを選択します。

6. 「属性の表示」リストで、表示する属性を選択します。
「属性の表示」リストには、任意の数の属性を追加できます。

7. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前行った属性の選択が削除されます。イテレータの選択内容を変更する前に、元の属性の選択内容をメモしておいてください。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

8. リストの属性を再編成するには、「属性の表示」リストで属性を選択し、選択項目を移動矢印ボタンをクリックして、リスト内の属性を再配置します。
リストの最上部から最下部までの属性の位置によって、最上部から最下部までのリスト内の属性の位置が決まります。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-8は、「データ・コントロール」パネルからリストを挿入した後に作成されるメソッドを示しています。

例5-8 リスト・バインディングのためのモデル・メソッドの設定

myList.setModel((ListModel)panelBinding.bindUIControl("DataControlId", myList));

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

5.11 列挙モードのADFリスト・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入する次のUIコントロールに、列挙モードのADFリスト・バインディングを設定できます。

- コンボ・ボックス

- リスト

- ラジオ・ボタン・グループ

- スピナー

列挙モードのバインディングでは、ユーザーは表示リストから値を選択して、データ・コレクションの属性を更新できます。列挙モードでモデル・リスト・バインディング・エディタを使用して、コントロールの対象となるデータ・コレクションおよび属性を選択し、ユーザーが選択する値のセットを指定します。適切な選択肢を指定するには、バインドされた属性に指定される値を把握しておく必要があります。

列挙モードでリスト・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「データ・コントロール」パネルで、表示する目的の属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. コントロール用のリスト・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 「データ・コレクション」リストから、更新する属性が含まれるデータ・コレクションを選択します。

6. 「属性」リストから、値リストに表示する属性を選択します。

7. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前選択していた属性が削除されます。イテレータの選択を変更する前に、選択されていた元の属性を記録しておく必要があります。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

8. コントロールがコンボ・ボックス、リストまたはラジオ・ボタン・グループの場合、コントロールに表示する順番で、「一連の値」に値を入力します。[Enter]キーを押して値を設定し、新しい値の入力を開始します。属性に対して有効な値を入力する必要があります。

9. コントロールがスピナーの場合、定義する範囲からユーザーが選択できるようにする場合は、「値の範囲」を選択します。特定のリストを定義する場合、「静的値」を選択して、リストやコンボボックスに対して前述のとおりに値を入力します。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-9は、「データ・コントロール」パネルからスピナーを挿入した後に作成されるメソッドを示しています。

例5-9 スピナー・バインディングのためのモデル・メソッドの設定

mySpinner.setModel((SpinnerModel)panelBinding.bindUIControl("DataControlId", mySpinner));

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

5.12 LOVモードのADFリスト・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するボタンLOV UIコントロールに対してLOV(値リスト)モードでADFリスト・バインディングを設定できます。

LOVボタンでは、選択を表示するためのUIと、選択を実行するためのUI (個別ウィンドウの形式)の両方が提供されます。その他すべてのコントロールは、別個のコントロールを追加して、ユーザーの選択の対象を表示することが必要です。

LOVモード・バインディングにより、ユーザーは、1つ以上の属性を含むデータ・コレクションの行を表示するリストから、値を選択できます。ユーザーが値を選択すると、LOVにより、別のデータ・コレクションの1つ以上の属性が、選択内容に応じて更新されます。LOVモードでリスト・バインディング・エディタを使用して、ソースとターゲットのデータ・コレクション、それらの属性間のバインディング、およびLOVに表示する属性を定義します。

LOVモードでリスト・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、空のADF Swingパネルの生成に関する項を参照してください。

2. 「データ・コントロール」パネルで、表示する属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

注意:

ボタンLOVを、LOVの選択内容を受け取るフォーム・フィールドの近くにあるパネルに移動します。

4. コントロール用のリスト・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

表示するLOVを定義するには、次のようにします。

1. リスト・バインディング・エディタで「バインディング定義」タブを選択して、LOVで使用するデータ・コレクションを選択します。

- 「ベース・データソース」は、選択肢の値リストの表示に使用するコレクションを定義します。これは、データ・モデル・プロジェクトにあるマスター・データ・コレクションによって制限されないコレクションにする必要があります。

- 「リスト・データ・コレクション」は、ADF Swingパネルで選択された値を受け取る属性を含むコレクションです。パネルに表示するデータ・コレクションと同じデータ・コレクションを指定してください。

2. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前行った属性の選択が削除されます。イテレータの選択内容を変更する前に、元の属性の選択内容をメモしておいてください。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

3. 「追加」をクリックし、2つのデータ・コレクション間で1つ以上の属性をバインドします。
「リスト・バインディング・エディタ」の下の領域には、値リストを表示するためのコレクションと、属性の選択内容を受け入れるためのコレクションの間で使用可能なLOVバインディング属性のリストがある表が表示されます。

4. ADF Swingフォームに表示されるフィールドに値を提供するために使用する「LOV属性」ドロップダウンから、属性を選択します。

5. LOVからの値を受け取る「ターゲット属性」ドロップダウンから、属性を選択します。

6. もう一度「追加」をクリックすることで、複数の属性を同じLOVでバインドします。

7. 「LOVの表示属性」タブを選択し、LOVウィンドウに表示する属性を選択します。
「選択済の属性」リストには任意の数の属性を追加できますが、LOVバインディング属性(選択された値を表示する属性)を追加する必要はありません。

8. 属性でサポートされる場合には、オプションとして「NULL値の選択」タブを選択し、NULL値を指定できます。
これは、他の値が指定できないときに選択する項目です。

9. さらに、オプションとして「ランタイムLOVダイアログの詳細」タブを選択し、LOVダイアログの表示位置とサイズをカスタマイズできます。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-10は、「データ・コントロール」パネルからリストを挿入した後に作成されるメソッドを示しています。

例5-10 リスト・バインディングのためのモデル・メソッドの設定

myList.setModel((ListModel)panelBinding.bindUIControl("DataControlId", myList));

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

コントロールを挿入して、更新されたLOVターゲット属性値を表示するには、次のようにします。

1. 「データ・コントロール」パネルで、開いたパネルに、LOVバインディングのターゲット属性として前に選択済の属性をドラッグします。

2. 子を追加ポップアップ・リストから、更新後の属性値を表示するために挿入するUIコンポーネントを選択します。

LOVに表示する行数を変更するには、次のようにします。

1. 「アプリケーション」ウィンドウで、範囲サイズを制限するLOVコンポーネントが含まれているデータ・パネルを右クリックし、「開く」を選択します。

2. Javaビジュアル・エディタで、「バインディング」タブをクリックし、「実行可能ファイル」リストから、LOVコンポーネント・バインディングに対応するイテレータを選択し、「編集」をクリックします。
多くの場合、「バインディング」リストでコントロール・バインディングを選択し、「実行可能ファイル」リストで対応するイテレータを特定できます。

3. 「プロパティ」ウィンドウで「共通」セクションを開き、RangeSize値を編集し、[Enter]キーを押します。
デフォルトの値である10行から、この値を増やせます。

注意:

-1および0という値には特定の意味があります。値-1の場合、使用可能なオブジェクトすべてがコレクションから返されます。値0の場合、コレクションがデータソースから取得を行うために収容しているのと同じ数のオブジェクトが返されます。

範囲サイズでの作業の詳細は、第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」を参照してください。

5.13 ADF LOVボタン・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入するボタンLOV UIコントロールに対してLOV(値リスト)モードでADFリスト・バインディングを設定できます。

LOVボタンでは、選択を表示するためのUIと、選択を実行するためのUI (個別ウィンドウの形式)の両方が提供されます。その他すべてのコントロールは、別個のコントロールを追加して、ユーザーの選択の対象を表示することが必要です。

LOVモード・バインディングにより、ユーザーは、1つ以上の属性を含むデータ・コレクションの行を表示するリストから、値を選択できます。ユーザーが値を選択すると、LOVにより、別のデータ・コレクションの1つ以上の属性が、選択内容に応じて更新されます。LOVモードでリスト・バインディング・エディタを使用して、ソースとターゲットのデータ・コレクション、それらの属性間のバインディング、およびLOVに表示する属性を定義します。

LOVモードでリスト・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、空のADF Swingパネルの生成に関する項を参照してください。

2. 「データ・コントロール」パネルで、表示する属性を、開いているフォームまたはパネルにドラッグします。
データ・コレクションではなく、必ず属性を選択します。

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

注意:

ボタンLOVを、LOVの選択内容を受け取るフォーム・フィールドの近くにあるパネルに移動します。

4. コントロール用のリスト・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

表示するLOVを定義するには、次のようにします。

1. リスト・バインディング・エディタで「バインディング定義」タブを選択して、LOVで使用するデータ・コレクションを選択します。

- 「ベース・データソース」は、選択肢の値リストの表示に使用するコレクションを定義します。これは、データ・モデル・プロジェクトにあるマスター・データ・コレクションによって制限されないコレクションにする必要があります。

- 「リスト・データ・コレクション」は、ADF Swingパネルで選択された値を受け取る属性を含むコレクションです。パネルに表示するデータ・コレクションと同じデータ・コレクションを指定してください。

2. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前行った属性の選択が削除されます。イテレータの選択内容を変更する前に、元の属性の選択内容をメモしておいてください。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

3. 「追加」をクリックし、2つのデータ・コレクション間で1つ以上の属性をバインドします。
「リスト・バインディング・エディタ」の下の領域には、値リストを表示するためのコレクションと、属性の選択内容を受け入れるためのコレクションの間で使用可能なLOVバインディング属性のリストがある表が表示されます。

4. ADF Swingフォームに表示されるフィールドに値を提供するために使用する「LOV属性」ドロップダウンから、属性を選択します。

5. LOVからの値を受け取る「ターゲット属性」ドロップダウンから、属性を選択します。

6. もう一度「追加」をクリックすることで、複数の属性を同じLOVでバインドします。

7. 「LOVの表示属性」タブを選択し、LOVウィンドウに表示する属性を選択します。
「選択済の属性」リストには任意の数の属性を追加できますが、LOVバインディング属性(選択された値を表示する属性)を追加する必要はありません。

8. 属性でサポートされる場合には、オプションとして「NULL値の選択」タブを選択し、NULL値を指定できます。
これは、他の値が指定できないときに選択する項目です。

9. さらに、オプションとして「ランタイムLOVダイアログの詳細」タブを選択し、LOVダイアログの表示位置とサイズをカスタマイズできます。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-11は、「データ・コントロール」パネルからボタンLOVを挿入した後に作成されるメソッドを示しています。

例5-11 LOVボタン・バインディングのためのモデル・メソッドの設定

myList.setModel((ButtonModel)panelBinding.bindUIControl("DataControlId", jButton1));

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

コントロールを挿入して、更新されたLOVターゲット属性値を表示するには、次のようにします。

1. 「データ・コントロール」パネルで、開いたパネルに、LOVバインディングのターゲット属性として前に選択済の属性をドラッグします。

2. 子を追加ポップアップ・リストから、更新後の属性値を表示するために挿入するUIコンポーネントを選択します。

LOVに表示する行数を変更するには、次のようにします。

1. 「アプリケーション」ウィンドウで、範囲サイズを制限するLOVコンポーネントが含まれているデータ・パネルを右クリックし、「開く」を選択します。

2. Javaビジュアル・エディタで、「バインディング」タブをクリックし、「実行可能ファイル」リストから、LOVコンポーネントに対応するイテレータを選択し、「編集」をクリックします。
多くの場合、「バインディング」リストでコントロール・バインディングを選択し、「実行可能ファイル」リストで対応するイテレータを特定できます。

3. 「プロパティ」ウィンドウで「共通」セクションを開き、RangeSize値を編集し、[Enter]キーを押します。
デフォルトの値である10行から、この値を増やせます。

注意:

-1および0という値には特定の意味があります。値-1の場合、使用可能なオブジェクトすべてがコレクションから返されます。値0の場合、コレクションがデータソースから取得を行うために収容しているのと同じ数のオブジェクトが返されます。

範囲サイズでの作業の詳細は、第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」を参照してください。

5.14 LOVダイアログに関する必知事項

ADF Swing LOV(値リスト)コントロール・バインディングを指定する場合、JButtonコントロールは一意です。これは、JButtonコントロールは、LOVコントロール・バインディングをサポートする他のSwingコントロールとは異なり、LOVダイアログを表示するためです。ユーザーに表示されるダイアログには、LOVバインディングで表示するために指定した属性が表示されます。

LOVダイアログは、次のいくつかのカスタム機能をサポートしています。

- ユーザーによって開始できる検索モード操作(この機能が有効化されている場合)。

- ダイアログのカスタム・タイトルおよび表示位置。

- LOVバインディングが設定されているJButtonコントロールをユーザーがクリックしたときに独自のLOVダイアログを表示するためのJULovPanelInterfaceのサブクラス化機能。

検索モード操作がJButtonコントロール上のLOVバインディングに対して有効化されている場合、ユーザーはLOVダイアログ・ナビゲーション・バーで検索ボタンをクリックすることでLOVダイアログを検索モードに設定できます。検索モードのLOVダイアログでは、ユーザーは、ビュー基準を入力して、バインドされたビュー・オブジェクト行に対する問合せを実行できます。LOVバインディングによって、問合せが実行され、指定されているビュー基準に一致する行のみが表示されます。

ユーザーは、次のように実行することで、LOVダイアログを通して検索モード問合せを実行します。

1. LOVダイアログのナビゲーション・バーで検索に設定モードをクリックし、バインドされた属性ごとに1つのビュー基準フィールドを表示します。

2. 一致させる属性の表示基準フィールドに値を入力します。
入力する値には適切な比較記号(>、<、=)を含めます。同じ表示基準の値はすべてANDで追加されます。

3. LOVダイアログのナビゲーション・バーでExecute Queryボタンをクリックし、結果をLOVダイアログに返します。

ADFビジネス・コンポーネントでのビュー基準の使用方法の詳細は、JavaDocでoracle.jbo.ViewCriteriaクラスを参照してください。

5.15 ADFスクロール・バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入する次のUIコントロールに、ADFスクロール・バインディングを設定できます。

- スクロール・バー

- スライダ

スクロール・バインディングにより、ユーザーは、バインドされたデータ・コレクションの、現在のデータ・オブジェクトの相対的な位置を表示できます。コントロール・サムあるいはインジケータの位置は、データ・コレクションの範囲全体のうち表示されているデータ・オブジェクトの数に比例します。スクロールバー・バインディング・エディタを使用して、コントロールの操作対象となるデータ・コレクションを選択します。

スクロール・バインディングを設定するには、次のようにします。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

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

3. コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. コントロール用のスクロール・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. スクロール・バインディング・エディタで、スクロールするデータ・オブジェクトを含む「ベース・データソース」を選択します。

6. 選択したデータ・コレクションにアクセスするために指定したイテレータが「イテレータ」ドロップダウン・リストにすでに表示されている場合、選択内容のままにします。ドロップダウンが空の場合、「新規」をクリックしてイテレータを作成し、ドロップダウン・リストに表示します。

注意:

ドロップダウン・リストでイテレータの選択内容を変更すると、以前選択していた属性が削除されます。イテレータの選択を変更する前に、選択されていた元の属性を記録しておく必要があります。必要に応じて「取消」を押し、元の属性選択を更新しないでバインディング・エディタを終了できます。

7. データ・コレクション・オブジェクト(行)・カウントを使用できます。通常は、「スクロール範囲の推定」を選択したままにします。データ・コレクションによってキャッシュされていないデータベースの行をカウントする場合には、このオプションを選択します。

注意:

このオプションが表示されるのは、データ・モデル・プロジェクトにADFビジネス・コンポーネントが含まれる場合のみです。他のビジネス・サービスがデータ・モデル・プロジェクトに作成されると、このオプションはサポートされません。ADFビジネス・コンポーネント・データ・モデル・プロジェクトの場合、このオプションを選択しない(つまり実際の行数を強制的にカウントする)と、そのための問合せが起動される可能性があるため、デフォルトでこのオプションが選択されています。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-12は、「データ・コントロール」パネルからスライダを挿入した後に作成されるメソッドを示しています。

例5-12 スクロール・バインディングのためのモデル・メソッドの設定

mySlider.setModel((BoundedRangeModel)panelBinding.bindUIControl("DataControlId", mySlider));

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

5.16 ADF表バインディングのカスタマイズ方法

「データ・コントロール」パネルから挿入する表UIコントロールに、ADF表バインディングを設定できます。

テーブル・バインディングにより、ユーザーは、属性名(列ヘッダー)と、データ・コレクションからの値で構成される表を表示できます。テーブル・バインディング・エディタを使用して、表示するデータ・コレクションおよび属性を選択します。また、表示する列幅およびテーブル・セル・エディタを含む、列属性の表示プロパティを指定できます。

注意:

ADFビジネス・コンポーネント・データ・モデル・プロジェクトでは、属性にコントロール・ヒントを設定することによって属性値を更新可能にできます。その場合、ユーザーは、更新可能な属性の値を表から直接編集できます。コントロール・ヒントのラベル・テキストを設定すると、各属性に対して列ヘッダーに表示されるラベルを変更できます。

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

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。

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

3. 表コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

注意:

「データ・コントロール」パネルを使用してJTableコントロールをADF Swingパネルまたはフォームにドロップすると、最初は、表に選択されたコレクションのすべての属性(列)が表示されます。表の表示属性リストを変更するには、表バインディング・エディタを使用できますが、変更はJavaビジュアル・エディタにすぐには反映されません。ビジュアル・エディタを表のバインディング情報(フォームまたはパネルのPageDef.xmlファイルに保存されている)と同期化するには、クラス・ファイルを再コンパイルするか、またはビジュアル・エディタで表のサイズを変更します。

4. コントロール用の表バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

5. 表バインディング・エディタで、「属性バインディング」ページを表示して、表に表示する属性が含まれる「ベース・データソース」を選択します。
作成する表は、コレクションまたは構造化されたオブジェクトのスカラー属性に基づいている必要があります。たとえば、return()メソッドの複雑なコレクション(配列を含む)を表としてドロップする場合、コレクションの属性はアクセッサにより定義されるため表示されません。コレクションの個々のアクセッサは属性を定義するため、表としてドロップできます。

6. 「選択可能属性」リストで、表示する属性を選択し、それを「選択済の属性」リストに追加します。「属性の表示」リストには、任意の数の属性を追加できます。

7. 表の列を再編成する場合、「選択済の属性」リストで属性を選択し、選択項目を移動矢印ボタンをクリックして、リスト内の属性を再配置します。
リストの最上部から最下部までの属性の位置により、表の左から右への列の位置が決まります。

8. 「属性のプロパティ」を選択して、オプションとして列幅と使用するセル・エディタを変更できます。

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

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-13は、「データ・コントロール」パネルから表を挿入した後に作成されるメソッドを示しています。

例5-13 表バインディングのためのモデル・メソッドの設定

myTable.setModel((TableModel)panelBinding.bindUIControl("DataControlId", myTable));

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

表の列をカスタマイズするには、次のようにします。

1. 表バインディング・エディタで「属性プロパティ」ページを表示し、表で表示する属性名(列)のリストを表示します。

2. オプションとして、修正する列幅が含まれる属性に対応する「幅」フィールド内でダブルクリックします。デフォルトの幅は、Javaビジュアル・エディタで表示される表のサイズによって決まります。
また、ビジネス・コンポーネント属性のレベルでコントロール・ヒントを設定することによっても列幅を指定できます。コントロール・ヒントの幅が指定される場合、その値はテーブル・バインディング・エディタの「属性のプロパティ」ページで表示されます。

3. [Return]キーを押して、フィールドに新しい幅を設定します。

4. オプションとして、設定するエディタを含む属性に対応する「エディタ」フィールド内をクリックします。デフォルトのエディタは単純なテキスト・フィールドです。

注意:

ビジネス・コンポーネント属性のレベルでフォーマッタおよびフォーマット・コントロール・ヒントを設定することで、さらにフォーマット・マスクを指定できます。

5. エディタをリストから選択し、省略記号ボタンを押して、バインディング・エディタを開きます。
ComboBoxおよびスピナー・エディタの場合は、ページ定義から既存のバインディングを選択できます。選択するバインディングは、テーブル・バインディング・エディタで表示される属性にバインドされる必要があります。

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

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

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

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

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

- コントロール・バインディング・ターゲットとして使用する開始またはルート・データ・コレクション(たとえば、ADFビジネス・コンポーネント・ビュー・オブジェクト)。

- そのルート・コレクションおよび他のデータ・コレクションからの1つ以上のアクセッサ(たとえば、ADFビジネス・コンポーネント・ビュー・リンク)。ツリー・バインディング・エディタには、そのノードから次のレベルにドリルダウンするために使用可能な一連のアクセッサが表示されます。

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

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

1. Javaビジュアル・エディタでデータ・パネルを開き、JScrollPaneコンテナをパネルに追加します。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

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

3. ツリー・コントロールをスクロール可能なパネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

4. JTreeコントロール用のツリー・バインディング・エディタを表示します。
詳細は、第5.2項「ADF SwingパネルのADFバインディングのカスタマイズ方法」を参照してください。

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

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

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

3. 「ルールの追加」アイコン・ボタンをクリックし、ルート・ノードのルールの定義を完了します。

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

5. 「アクセッサ」リストから、マスター・コレクションとツリーの最初のブランチ間のリンクを指定するアクセッサを選択します。
たとえば、顧客コレクションと注文コレクションのADFビジネス・コンポーネント・アクセッサは、リストではOrdersViewとして表示されます。

注意:

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

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

1. 親ツリー・レベルのルールを選択し、「ルールの追加」アイコン・ボタンをクリックし、マスター・コレクションから表示する子ブランチ・コレクションを選択します。
これは、ツリーのノードを定義するディテール・コレクションです。たとえばOrderディテール・コレクションを指定し、そこからOrder ID情報をツリーに表示します。

2. 「属性」リストで、ツリー内のブランチ・ノードとして表示する属性を1つ(たとえば、各顧客の姓)を選択します。

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

注意:

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

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

5. 「OK」をクリックし、バインディング設定を保存します。
バインディング・エディタによって、定義した規則にエラーがないかがチェックされます。表示されるエラー・メッセージは次のとおりです。

- "Invalid definition, either no root or no rules defined." ルールを定義していないか、ルート・ノードに対してルールを定義していません。

- "Defined root not found in this Application Module." ルート・ノードを定義するビュー・オブジェクトの使用名が、フォーム・バインディングに定義されているアプリケーション・モジュールで見つかりません。

- "No rule found for accessor... ." ルール表のすべてのアクセッサにルールが定義されていません。エラー・チェックでは、特定のアクセッサに関する多相規則の数は検証されず、規則表の各アクセッサに規則が定義されているかどうかのみが検証されます。

開発者は、jbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを作成し、DataControlIdを参照してメタデータを指定します。例5-14は、「データ・コントロール」パネルからツリーを挿入後、作成されるメソッドを示しています。このメソツドは、メタデータを指定するためにDataControlIdを参照します。

例5-14 ツリー・バインディングのためのモデル・メソッドの設定

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

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

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

「ツリー・バインディング・エディタ」では、ブランチ内の各ノードに表示するアイコンと、各ブランチの開くアイコンおよび閉じるアイコンを選択できます。ツリー・バインディング・エディタでアイコンの選択を表示するには、アイコン・イメージ・ファイルをユーザー・インタフェース・プロジェクトのsrcフォルダにコピーする必要があります。ツリー・バインディング・エディタのアイコン・ドロップダウン・メニューを使用して、各メニューに、現在のproject/srcフォルダのすべてのイメージ・ファイルが表示されます。

6 ADF Swingパネルでのグラフの表示

この章では、ADF Swingパネルで、データバインドされたグラフを作成する方法について説明します。グラフ・コンポーネントによって、様々なグラフでデータを表示できます。

この章には、次のセクションがあります。

- 第6.1項「ADF Swingパネルでのグラフについて」

- 第6.2項「ADF Swingパネルに対してグラフを作成する方法」

- 第6.3項「グラフ・コンポーネント作成時の処理内容」

- 第6.4項「グラフ・コンポーネントをカスタマイズする方法」

- 第6.5項「グラフ・データを変更する方法」

6.1 ADF Swingパネルでのグラフについて

JDeveloperを使用して、Oracle ADFでサポートされている任意のビジネス・サービスのデータソースとバインド可能なグラフ・コンポーネントを作成できます。サポートされているビジネス・サービスには、ADFビジネス・コンポーネント、Enterprise JavaBeans (EJB)、Toplink、WebサービスおよびカスタムJavaBeansがあります。

注意:

グラフを使用するには、第6.2項「ADF Swingパネルに対してグラフを作成する方法」の説明のように、ビジネス・サービスで、グラフ・コンポーネントによって想定されている形式のデータを提供できることが必要です。

JDeveloperの「データ・コントロール」パネルを使用して、ADFビジネス・コンポーネント・ビュー・オブジェクトなどのデータ・モデル・コンポーネントをパネルにドラッグできます。ADFのデータバインドされたグラフ・コンポーネントを作成した後は、いつでも、JDeveloperのデザインタイム機能を使用してグラフ・プロパティを変更できます。

JDeveloperは、Oracle Business Intelligence Beans (BI Beans)テクノロジのシームレスな統合を介した、データバインドされたグラフの作成もサポートしています。グラフ・テクノロジを使用するためにBI BeansJDeveloperアドイン・コンポーネントをインストールする必要はありませんが、使用可能なドキュメントを表示するためにこのアドインをインストールすることもできます。

グラフ・コンポーネントには次のような機能や特性があります。

- カスタム・アプリケーションとの統合が簡単
グラフ・コンポーネントは再使用可能であるため、ADF Webアプリケーション(現在はJSPページのみ)およびADF Swingアプリケーションなどカスタム・アプリケーションにそれを追加できます。

- 構築と管理が簡単
「データ・コントロール」パネルを使用して、ADFビジネス・コンポーネント・ビュー・オブジェクトなどのデータ・モデル・コンポーネントをフォームにドラッグできます。グラフ・プロパティおよびデータ・バインディングは「プロパティ」ウィンドウで公開されるため、開発者はこれらの設定を簡単に変更できます。

- Javaを介したプログラムによるアクセス
BI Beansグラフ・コンポーネントのpublicメソッドをコールすることにより、グラフ・コンポーネントを変更できます。

- 異なるデータ・ソースのサポート
ADFビジネス・コンポーネント、Enterprise JavaBeans、Toplink、Webサービス、カスタムJava Beans

- 単一グラフおよびマスター/ディテール・グラフの生成

- ダウンロードが小サイズ

- デプロイ時の効率的なパフォーマンス

ADF Swing oracle.jbo.uicli.juiパッケージには、データバインドされたグラフ・コンポーネントに関連する次のクラスが含まれています。

- JUGraphBinding

- JUSingleTableGraphBinding

- JUMasterDetailGraphBinding

表6-1は、グラフで強調するデータの様々な性質とそれに対応するグラフ・タイプを示しています。

表6-1 グラフのタイプ

データの特徴

例

グラフ・タイプ

一定期間または同時点における複数アイテムの差分

どの店舗のどの製品が売上が最も多いか?

集合棒グラフまたは3D棒グラフ

時間の経過に伴う傾向

当社の市場シェアは拡大しているか、または縮小しているか?

単純折れ線グラフまたは積上げ面グラフ

一定期間にわたる周期傾向

この製品の売上げは、過去3年にわたって常に3月がピークだったか。

レーダー・グラフ

データの変化率

市場シェアはどのくらいの速さで拡大しているか?

単純折れ線グラフまたは積上げ面グラフ

割合または割合の変化

各製品ラインからの収益額はいくらか。人気商品は昨年の同じ時期と同じ収益(%)を生んでいるか。

円、またはパーセント棒、パーセント折れ線、パーセント面

全体と部分の関係

どの製品の売上げが総売上高に最も関係しているか。どの製品の売上が総売上高の傾向に一致しているか。傾向とは異なる製品はどれか。

円、パーセント棒または折れ線、または積上げ棒、折れ線、または面

全体と部分の関係、および各部分の詳細

売り上げに占める割合が最も高い製品ラインはどれか。その製品ラインの中で、どの地域の売上が最も多いか。

補助棒付き円

各部分の全体に対する変化

会社全体で最大の収益を達成している製品は、各地区でも最大の収益を達成しているか。

複数円、または積上げ棒、折れ線または面

2つの変数間の関係

マーケティングへの投資で売上が増えるか?

散布図または極

3つの変数間の関係

マーケティングにさらに費用を費やせば、売上および利益も比例して増えるか。

バブル

システム内の障害発生箇所

障害の発生率が最も高いのはどこか?

パレート

6.2 ADF Swingパネルに対してグラフを作成する方法

「データ・コントロール」パネルからADF Swingパネルに挿入するグラフ・コンポーネントに対してADFグラフ・バインディングを設定できます。

グラフ・コンポーネントの作成時に行う選択内容について理解するには、グラフ・コンポーネントが次の操作を行うのに十分なデータをADFビジネス・コンポーネント・データ・ソースから取得する方法について理解する必要があります。

- 各グラフ・マーカーの描画(最大3つのデータ・ポイントを使用)

- 各グラフ・グループのラベル付け(月名など)

- 単一シリーズまたは複数シリーズ・タイプのグラフの描画

- 各グラフのラベル付け

データ・バインディングは、選択するデータ・モデル・コンポーネント(たとえば、ADFビジネス・コンポーネント・ビュー・オブジェクトの属性)によってグラフ・エディタで決定されます。グラフ・エディタでは特定のグラフ・タイプのデータ・オブジェクトおよび属性を簡単に選択できますが、明確に選択するにはデータ・モデルをよく理解している必要があります。通常、グラフ・タイプを選択すると、そのグラフ・タイプのマーカーを描画するのに必要なデータ・ポイント値ごとに1つの属性がグラフ・エディタに表示されます。グループ・タイプのグラフを選択する場合、グラフ・エディタでは、マスター・データ・コレクションを適切なディテール・データ・コレクションにリンクするためのアクセッサも選択するよう求められます。

たとえば、グラフ・エディタで複数の株式の高値/安値/終値(HLC)株価グラフ・タイプを描画する場合、次を選択する必要があります。

- 株式タイプごとに1つの行があるマスター・データ・コレクション

- 株式のデータごとに対応する行があるディテール・データ・コレクション

- 株式グラフごとにラベルを指定するマスター・データ・コレクションの属性

- マーカー・データ値ごとに1つのディテール・データ・コレクションの属性(この場合は高値、安値および終値)

一方、グラフ・エディタで毎月の高値を示す単一棒グラフとして単一株式を描画する場合、次を選択する必要があります。

- 制約のないデータ・コレクション(マスター/ディテール関連がないデータ・コレクション)

- 月ごとにラベルを指定する1つの属性

- マーカー・データ値の1つの属性(この場合は高値のみ)

グラフ・コンポーネントがビジネス・サービス・データ・モデルのデータを解釈する方法を理解するために役に立ちます。通常、データ・モデル・プロジェクトのデータ・モデルの要件は、次によって決まります。

- 選択したグラフ・タイプで各グラフ・マーカーを決定するために必要なデータ・ポイント値は1つ、2つまたは3つのいずれか

- シリーズ・タイプ(単一表)とグループ・タイプ(マスター/ディテール)のいずれのグラフを描画するか

たとえば、例6-1に示すデータによる棒グラフなどの単一グラフが必要だと仮定します。

例6-1 棒グラフ・データ

ENAME   SAL   Comm
KING    1000  200
CLARK   2000  100
MILLER  1500  50

この表の各行はグラフのシリーズに対応しており、各列はグループに対応しています。

一部のタイプのグラフ(棒グラフなど)では、マーカーごとに1つの値が必要です。これは、他のグラフ・タイプ(HLC株価グラフなど)とは対照的です。このタイプの場合、マーカーごとに3つの値(高値、安値および終値)が必要です。グラフに複数のデータ値が必要な場合、例6-2に示すように、データベース表でそれらを別々の行に格納すると効率的です。

例6-2 複数データ値の格納

Date         High  Low  Close
10 Jun 03    11    10    11
11 Jun 03    11     7     9
12 Jun 03    10     9     9.5

グラフ・コンポーネントは、データが単一表に格納されるタイプのグラフをサポートしています。グラフに複数の値が必要な場合、グラフのデータはマスター/ディテール関連としてモデル化する必要があります。各ディテール・データは、マスター値に対応する1シリーズのデータを示します。前述の株式グラフの例では、データ・モデルは例6-3のようになります。

例6-3 データ・モデル

Master table stock_ticker_table
--------------------------------
ticker              symbol
Oracle Corporation  ORCL
XYZ Corporation     XYZ

Detail table stock_price_table
-----------------------------------
ticker  Date       High  Low  Close
ORCL    10 Jun 03    23   22    23
ORCL    11 Jun 03    24   23    23
ORCL    12 Jun 03    25   24    24
XYZ?    10 Jun 03    10    9     9
XYZ     11 Jun 03    10    9     9
XYZ     12 Jun 03    10    8     9

単一表のグラフの場合、データ・モデルは単純で、必要なのは次のもののみです。

- スタンドアロンのデータ・コレクション(行ごとに1つのグラフ・マーカーを描画します)

- グラフに表示されるグループのラベルを指定する1つの属性

- グラフのデータ・ポイントごとに1つの属性(各グラフ・マーカーを描画するのに必要なすべての属性)

より複雑なグループ・タイプのグラフの場合、データ・モデルはマスター/ディテール関係に基づいており、次のものが含まれている必要があります。

- マスター・データ・コレクション(行ごとに1つのシリーズを指定するがデータは含まれません)

- シリーズごとにラベルを指定する1つのマスター・データ・コレクション属性

- シリーズごとに1つのディテール・データ・コレクション(特定のシリーズについて行ごとに1つのグラフ・マーカーを描画します)

- グラフに表示されるグループのラベルを指定する1つのディテール・データ・コレクション属性

- グラフのデータ・ポイントごとに1つのディテール・データ・コレクション属性(各グラフ・マーカーを描画するのに必要なすべての属性)

データバインドされたグラフを作成する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、データ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。

2. 「データ・コントロール」パネルで、グラフ・コンポーネントにバインドするコレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Graph」を選択します。

4. Javaビジュアル・エディタで、「バインディング」タブをクリックし、リストからグラフ・コンポーネント・バインディングを選択し、「編集」をクリックします。

5. グラフ・エディタで、ビュー選択、シリーズ属性およびデータ属性など、グラフに表示する具体的なデータを選択します。

6.3 グラフ・コンポーネント作成時の処理内容

グラフ・コンポーネントを作成すると、JDeveloperによってグラフ・プロパティおよび関連するデータ・バインディング情報を記述したファイルが生成されます。JDeveloperによって、表6-2に示すファイルが生成され、更新されます。

表6-2 データバインドされたグラフ・コンポーネントに対して生成されるファイル

ファイル

説明

<object>.java

グラフ・プロパティをプログラムで設定および取得可能にするグラフ・コンポーネントのJava実装。

BIGraphDef.xml

グラフ・プロパティ定義ファイル。

<webpageName>PageDef.xml

グラフのADFデータ・バインディング情報が含まれているADFバインディング定義ファイル。

ファイルは、プロジェクトに追加されていて、「アプリケーション」ウィンドウからアクセスできます。それらは、アプリケーションを基準とした/src/clientディレクトリに配置されます。

例6-4は、ビジネス・サービスの「ADF Swing」パネルおよびADFビジネス・コンポーネントで構成されるアプリケーションのグラフ・コンポーネントのサンプルPageDef.xmlファイルを示しています。

例6-4 グラフ・コンポーネントのサンプルPageDef.xmlファイル

<?xml version='1.0' encoding='ISO-8859-1' ?>
<DCContainer
id="untitled1PageDef"
xmlns="http://xmlns.oracle.com/adfm"
Package="view" >
<Contents >
<DCIterator
id="model_AppModuleDataControl_EmployeesView1Iter"
Binds="model_AppModuleDataControl.EmployeesView1" >
</DCIterator>
<DCControl
id="EmployeesView1"
DefClass="oracle.jbo.uicli.graph.JUSingleTableGraphDef"
SubType="DCGraph"
ControlClass="oracle.dss.graph.Graph"
IterBinding="model_AppModuleDataControl_EmployeesView1Iter"
SeriesType="SINGLE_SERIES"
SeriesLabel="EmployeeId"
GraphPropertiesFileName="view.BIGraphDef1" >
<Contents >
<AttrNames>
<Item Value="EmployeeId" />
<Item Value="Salary" />
<Item Value="CommissionPct" />
<Item Value="ManagerId" />
<Item Value="DepartmentId" />
</AttrNames>
<ColumnLabels>
<Item Value="EmployeeId" />
<Item Value="Salary" />
<Item Value="CommissionPct" />
<Item Value="ManagerId" />
<Item Value="DepartmentId" />
</ColumnLabels>
</Contents>
</DCControl>
</Contents>
</DCContainer>

例6-5は、ビジネス・サービスの「ADF Swing」パネルおよびADFビジネス・コンポーネントで構成されるアプリケーションのグラフ・コンポーネントのサンプルDataBindings.xmlファイルを示しています。

例6-5 グラフ・コンポーネントのサンプルDataBindings.xmlファイル

<?xml version='1.0' encoding='ISO-8859-1' ?>
<JboProject
id="DataBindings"
xmlns="http://xmlns.oracle.com/adfm"
SeparateXMLFiles="false"
Package=""
ClientType="Generic" >
<Contents >
<DataControl
id="model_AppModuleDataControl"
SupportsFindMode="true"
SupportsTransactions="true"
Package="model"
Configuration="AppModuleLocal"
FactoryClass="oracle.adf.model.bc4j.DataControlFactoryImpl" >
</DataControl>
<Containee
id="untitled1PageDef"
ObjectType="BindingContainerReference"
FullName="view.untitled1PageDef" >
</Containee>
</Contents>
</JboProject>

6.4 グラフ・コンポーネントをカスタマイズする方法

データバインドされたグラフ・コンポーネントを作成した後は、いつでも、グラフ・エディタのデザインタイム機能を使用してグラフ・プロパティを変更できます。グラフ・エディタには、実際のデータではなく疑似データを使用してデータバインド・グラフが視覚的に表示されます。たとえば、場合によっては、異なるグラフ・タイプまたはグラフ・スタイルを使用してグラフを表示する必要があります。

既存のグラフ・コンポーネントを編集するには、次のようにします。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを開き、ビュー・パッケージのBIGraphDefx.xmlを右クリックし、「開く」を選択します。

2. グラフ・エディタで、エディタのツールバーから「グラフ・タイプ」または「グラフのフォーマット」のいずれかを選択します。

3. 「グラフ・タイプ」を選択した場合、別のグラフ・タイプを選択してデータを表示するか、グラフの外観またはスタイルを変更できます。

4. 該当するタブをクリックし、それに関連する設定を表示します。

5. 「グラフのフォーマット」を選択した場合、グラフのタイトル、判例、描画エリア、およびX軸とY軸の設定を変更できます。

6. 該当するタブをクリックし、それに関連する設定を表示します。

7. 「構造」ウィンドウで要素を選択し、ダブルクリックして、「プロパティ 」ウィンドウにそのプロパティ設定を表示することで、グラフのプロパティを編集することもできます。

注意:

データが十分でないことに関するエラー・メッセージが表示された場合、指定したデータ・モデルにグラフのレンダリングに必要なデータ列が十分に含まれていないため、別のグラフ・タイプを選択します。たとえば、折れ線グラフの場合、複数のデータ列が必要になります。使用可能なグラフ・タイプの説明は、第6.1項「グラフ・タイプ」を参照してください。

6.5 グラフ・データを変更する方法

ADF Swingパネルのグラフを作成した後は、いつでも、グラフ内の他のデータを表示することを決定できます。グラフ・バインディングのカスタマイズ・エディタで、グラフに対して別のデータ・ソースを選択できます。ただし、データ・ソースが別のデータ・モデルに属している場合は、第6.2項「ADF Swingパネルに対してグラフを作成する方法」の説明のように、新しいデータバインドされたグラフを作成する必要があります。

グラフ・データを変更するには、次のようにします。

1. 「アプリケーション」ウィンドウで、Javaビジュアル・エディタで開いているグラフ・コンポーネントが含まれているフォームで、「バインディング」タブを選択します。

2. 「バインディングと実行可能ファイル」ページで、グラフ・バインディングを選択し、「編集」をクリックします。

3. グループ・エディタで、ドロップダウン・リストから別のイテレータを選択します。

7 ADF Swingコントロールでの作業

この章では、ADF SwingフォームおよびパネルでのADF Swingコントロールの使用方法について説明します。ADF Swingは、ADF Swingアプリケーションの設計に使用できる標準Swingコントロールに加えて、ADF Swingコントロールと呼ばれる独自のコントロールのセットを備えています。

この章には、次のセクションがあります。

- 第7.1項「ADF Swing固有のコントロールについて」

- 第7.2項「JUArrayComboBoxコントロールの使用方法」

- 第7.3項「JUImageコントロールの使用方法」

- 第7.4項「ADF Swingアプリケーションにおけるマルチメディアに関する必知事項」

- 第7.5項「JULabelコントロールの使用方法」

- 第7.6項「ラベル・コントロールの使用方法」

- 第7.7項「JULovEditButtonコントロールの使用方法」

- 第7.8項「JUNavigationBarコントロールの使用方法」

- 第7.9項「検索モードでのJUNavigationBarコントロールの使用方法」

- 第7.10項「パネル内のADF Swingコントロールに対して検索モードを無効化する方法」

- 第7.11項「検索モードでのイテレータ・バインディングに関する必知事項」

- 第7.12項「JURadioButtonGroupPanelコントロールの使用方法」

- 第7.13項「JUShuttlePanelコントロールの使用方法」

- 第7.14項「JUStatusBarコントロールの使用方法」

7.1 ADF Swing固有のコントロールについて

ADF Swingは、ADF Swingアプリケーションの設計に使用できる標準Swingコントロールに加えて、独自のコントロールのセットを備えています。次の追加のコントロールが「データ・コントロール」パネルで使用できます。

- JUArrayComboBox

- JUImageControl

- JULabel

- JULabel - Label For

- JULovEditButton

- JUNavigationBar

- JURadioButtonGroupPanel

- JUShuttlePanel

- JUStatusBar

指定されたADF Swingコントロールに使用されるコントロール・バインディングのタイプは、そのコントロールによって実行されるアクションによって異なります。表7-1は、バインディングおよびそれらでサポートされている各種ADF Swingコントロールを示しています。

表7-1 コントロール・バインディングとADF Swingコントロール

バインディング

ADF Swingコントロール

属性バインディング

Label For

JULovEditButton (LOVダイアログのボタン)

JUImageControl

JULabel

配列コンボ・ボックス・バインディング

JUArrayComboBox

イテレータ・バインディング

JUNavigationBar

JUStatusBar

列挙モードでのリスト・バインディング

JUShuttlePanel

値リスト(LOV)モードでのリスト・バインディング

JURadioButtonGroupPanel

これらのコントロールも、これらが補足している標準Swingコントロールと同様に、MVC (Model-View-Controller)アーキテクチャに依存しています。ADF Swingコントロールは、Swingコントロールには存在しないコントローラに依存して、エンド・ユーザーの相互作用を管理する点で独特です。ADF Swingコントロールは、ADFモデル・バインディングとともに、多様なデータバインド機能を使用したJavaデスクトップ・アプリケーションの設計を可能にします。

7.2 JUArrayComboBoxコントロールの使用方法

配列コンボ・ボックスは、ADF Swing JUArrayComboBoxコントロールであり、タイプoracle.jbo.domain.arrayとしてマップされているビジネス・サービス・データ・コレクションの属性にバインドできます。配列コンボ・ボックスは、1つの属性からその値リストを表示するため、ADF属性バインディング(データ・コレクションの属性を介してデータベース内に格納されているデータにアクセスする)と連動します。現在、オブジェクト配列を編集するためのJDeveloperのデザインタイム・サポートがない場合、配列属性の要素は、数値、文字列、日付などスカラー値に制限されます。

注意:

JUArrayComboBoxは、オブジェクト配列を使用するためのデザインタイム・サポートを提供しませんが、JDeveloperで、ADF Swingインタフェースを実装する拡張を作成できます。

ユーザーは、配列コンボ・ボックスを使用して、既存の属性値を表示できます。また、表示されている値を追加、更新および削除することもできます。

スカラー型の配列属性にバインドする手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、データ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。

2. 「データ・コントロール」パネルで、イメージ・コントロールにバインドする属性を、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「JUArrayComboBox」を選択します。
JDeveloperによって、クラス・ファイルに、配列コンボ・ボックスを属性にバインドする次のようなコードが追加されます。

myJUArrayComboBox1.setDocument((Document)panelBinding.
bindUIControl("MyAttribute", myJuArrayComboBox1"));

配列属性に値を挿入する手順は次のとおりです。

1. Javaビジュアル・エディタで、ドロップダウン・リストを選択し、[Ctrl]キーを押しながらクリックし、新しい空のリスト・アイテムを作成します。

2. 空のリスト・アイテム内に、値を入力し、[Enter]キーを押します。

配列属性の既存の値を更新する手順は次のとおりです。

- アイテムを選択し、新しい値を入力し、[Enter]キーを押します。

配列属性から既存の値を削除する手順は次のとおりです。

- アイテムを選択し、[Delete]キーを押します。

7.3 JUImageコントロールの使用方法

イメージ・コントロールは、ADF Swing JUImageコントロールであり、ADF Swing属性バインディングを介してビジネス・サービス・コレクションの属性にバインドできます。属性バインディングは、特定のデータ・コレクションを介してデータベースに格納されているイメージにアクセスします。JUImageコントロールでサポートされているデータ型には、次のものとして格納されるイメージがあります。

- ADFビジネス・コンポーネント・ドメインBLOBデータ型

- ADFビジネス・コンポーネント・ドメインRawデータ型

- Oracle interMediaドメイン・イメージ・タイプ

フォームまたはパネルにデータバインドされたイメージ・コントロールを挿入する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、目的のデータ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。

2. 「データ・コントロール」パネルで、イメージ・コントロールにバインドする属性を、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「JUImageControl」を選択します。
JDeveloperによって、クラス・ファイルに、フォームと関連付けられているページ定義ファイルのMyImageAttributeバインディング定義を参照する次のようなコードが追加されます。

myJUImageControl1.setModel((JUDefaultControlBinding)
panelBinding.bindUIControl("MyImageAttribute",
myJUImageControl1));

イメージにスクロール・リージョンを追加する手順は次のとおりです。

1. 「プロパティ」ウィンドウで、「autoscrolls」フィールドをTrueに設定します。

ADF Swingフォーム内で、ユーザーは、データベース内に格納されているイメージ・ファイルを削除および更新できますが、イメージ自体を編集することはできません。

JUImageコントロールを使用する手順は次のとおりです。

イメージ・コントロールは、1つの表示エリアと2つのボタンがあるパネルで構成されます。

- 「変更」ボタン。ロードするイメージ・ファイルをユーザーが選択できる「開く」ダイアログ・ボックスを呼び出します。

- 「クリア」ボタン。イメージを削除します。

フォームまたはパネルのイメージ・コントロールのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでJUImageコントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJUImageコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
JUImageのコントロール・バインディング・ダイアログが表示されます。

7.4 ADF Swingアプリケーションにおけるマルチメディアに関する必知事項

JUImage ADF Swingコントロールは、データベース内のマルチメディアにアクセスするために使用できます。JUImageコントロールは、イメージのみに制限されています。

注意:

JDeveloperでは、OrdMediaControlコンポーネントのオーディオおよびビデオの使用は現在サポートされていません。したがって、開発者はADF Swing interMediaコントロールを使用して新しいアプリケーションを作成することはできません。ただし、下位互換性のために、必須interMediaライブラリが、依然としてJDeveloperに同梱されています。interMediaを使用する、前のJDeveloperリリースのADF Swingアプリケーションは、ADF Swingにアップグレードしても、引き続き機能します。

JUImageコントロールは、データベースからイメージを表示するために使用されるADF Swingのコントロールの以前の実装です。データベースのサポート対象のinterMediaオブジェクト・タイプからイメージをストリームできる場合、アプリケーションのパフォーマンスが必ず向上します。JUImageコントロールの場合、そのイメージ・ファイルは、アプリケーションでそれを表示する前に完全にダウンロードしておく必要があります。さらに、JUImageは、RAW、LONG RAW、BLOBおよびinterMedia IMAGEタイプに制限されています。

7.5 JULabelコントロールの使用方法

JULabelは、ADF Swing属性バインディングを介してビジネス・サービス・コレクションの属性にバインドできるADF Swingコントロールです。属性バインディングは、特定のデータ・コレクションを介してデータベースに格納されているデータにアクセスします。JULabelコントロールは、ラベルとして属性値をレンダリングします。

または、ADFビジネス・コンポーネント属性用に定義されたコントロール・ヒントのラベルを表示できます。詳細は、第7.6項「ラベル・コントロールの使用方法」を参照してください。

フォームまたはパネルにデータバインドされたラベルを挿入する手順は次のとおりです。

1. データ・パネルをJavaビジュアル・エディタで開きます。
詳細は、第2.10項「空のADF Swingパネルの作成方法」を参照してください。

2. 「ウィンドウ」メニューから、「アプリケーション」を選択します。

3. 「アプリケーション」ウィンドウで、「データ・コントロール」パネルを開きます。

4. 「データ・コントロール」パネルで、ラベルにバインドする属性を、開いているフォームまたはパネルにドラッグします。

5. 子の追加ポップアップ・リストから、「JULabel」を選択します。
JDeveloperによって、クラス・ファイルに、JULabelを属性にバインドする次のようなコードが追加されます。

myJuLabel.setModel((JULabelBinding)panelBinding.bindUIControl("MyAttribute", myJuLabel));

注意:

テキスト・プロパティは、ADF Swingフォームを実行するときに上書きされます。

フォームまたはパネルのラベルのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでJULabelコントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJULabelコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
「属性バインディングの編集」ダイアログが表示されます。

7.6 ラベル・コントロールの使用方法

ラベル・コントロールは、ADF Swing JULabelコントロールであり、ADF Swing属性バインディングを介してビジネス・サービス・コレクションの属性にバインドできます。このバインディングは、ADFビジネス・コンポーネント・ビュー・オブジェクトの属性に対して事前に定義されているコントロール・ヒントにアクセスします。JULabelコントロールは、定義済のヒントからラベルをレンダリングします。

または、属性値からラベルを表示できます。詳細は、第7.5項「JULabelコントロールの使用方法」を参照してください。

フォームまたはパネルにデータバインドされたラベルを挿入する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、データ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。

2. 「データ・コントロール」パネルで、ラベル・コントロールにバインドする属性を、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Label For」を選択します。
JDeveloperによって、クラス・ファイルに、JULabelを属性にバインドする次のようなコードが追加されます。

myjULabel1.setText(panelBinding.findCtrlValueBinding ("MyAttribute").getLabel());

注意:

テキスト・プロパティは、ADF Swingフォームを実行するときに上書きされます。

フォームまたはパネルのラベルのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでラベル・コントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJULabelコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
「属性バインディングの編集」ダイアログが表示されます。

7.7 JULovEditButtonコントロールの使用方法

LOV編集ボタン・コントロールは、ADF Swing JULovEditButtonコントロールであり、ADF Swing属性バインディングを介してビジネス・サービス・コレクションの属性にバインドできます。JULovEditButtonコントロールによって、ユーザーは、表示されるシャトル・リストに対して複数選択を実行できます。

フォームまたはパネルにデータバインドされたLOV編集ボタンを挿入する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、Javaビジュアル・エディタでフォームまたはデータ・パネルを開きます。

2. 「データ・コントロール」パネルで、JULovEditButtonコントロールにバインドするコレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Button LOV」を選択します。
JDeveloperによって、クラス・ファイルに、フォームと関連付けられているページ定義ファイルのDCShuttleバインディング定義を参照する次のようなコードが追加されます。

myjButton.setModel((ButtonModel)panelBinding.bindUIControl
("Address1",myjButton));

フォームまたはパネルのLOV編集ボタンのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでJULovEditButtonコントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJULovEditButtonコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
「ボタンLOVバインディングの作成」ダイアログが表示されます。

7.8 JUNavigationBarコントロールの使用方法

ナビゲーション・バーは、次のものにバインドできるADF Swing JUNavigationBarコントロールです。

- モデル・オブジェクトを介したビジネス・サービス・データ・コレクション

- コンストラクタを介してパネル・バインディングが渡されるJUPanel。

これらのバインディングの効果によって、ナビゲーション・バー・アクションの有効範囲が決まります。データ・コレクションにバインドする場合、JUNavigationBarによって、同じパネルを共有していて、かつその属性を介して同じデータ・コレクションにバインドしているコントロール間を移動できます。一方、JUNavigationBarコントロールを、子パネルが含まれているパネルに追加し、パネル・バインディングを設定することで、子パネル内のコントロールのナビゲーションを制御できます。

データ・コレクションにバインドする手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、データ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。

2. 「データ・コントロール」パネルで、ナビゲーション・バー・コントロールにバインドするデータ・コレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「JUNavigationBar」を選択します。
JDeveloperによって、クラス・ファイルに、JUNavigationBarをコレクションにバインドする次のようなコードが追加されます。

jUNavigationBar1.setModel(JUNavigationBar.createViewBinding
(panelBinding, jUNavigationBar1, "MyDataCollection", null, "MyCollectionIterator"));

JUPanelにバインドする手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、ナビゲーションするパネルが含まれているレイアウト・パネルに対してJavaビジュアル・エディタを開きます。

2. 「コンポーネント」ウィンドウのADF Swingコントロールページで、JUNavigationBarコントロールを、開いているフォームにドラッグします。

3. JUNavigationBarコントロールの「プロパティ」ウィンドウで、「model」フィールドを選択し、「ADF Swingパネル・バインディング」を選択します。
JDeveloperによって、クラス・ファイルに、JUNavigationBarを現在のパネルに渡されるパネル・バインディングにバインドする次のようなコードが追加されます。

myNavBar.setModel(JUNavigationBar.createPanelBinding
(panelBinding, myNavBar));

7.9 検索モードでのJUNavigationBarコントロールの使用方法

ADF Swingでは、検索モードを有効化したADF Swingデータ・パネルでJUNavigationBarコントロールを使用することで、パラメータ化された問合せをサポートできます。検索モードでは、ユーザーは、データ・パネルを使用して、サポートされているADF Swingコントロール・バインディングを介して検索基準を入力できます。

検索モードでパネルを実行する場合、ナビゲーションモードのコンポーネントによって検索基準コンポーネントが強制的に更新されることはなくなります。ユーザーが検索基準を入力できるようにするために、それらは空のままになります。

検索モードのデータ・パネルの一般的な使用法は、次のとおりです。

1. ユーザーが、パネルを検索モードにします。
たとえば、ユーザーが「Find」ボタンをクリックする場合があります。これはデフォルトでJUNavigationBar (ADFビジネス・コンポーネント・ビュー・オブジェクトにバインドされている)によって提供されています。

2. ユーザーが、フォームにすでに返されたデータの結果を絞り込むための検索基準を入力します。

3. 検索モードでは、アンカー付きのワイルドカード検索が実行されます。
検索列の先頭文字がアンカーとして使用され、入力した文字列で始まるすべての文字列が検索されます。

4. ADF Swingの同じビュー・オブジェクトにバインドする別のコントロール(JTableコントロールなど)は、パラメータ化された問合せの結果を表示します。

パラメータ付き問合せは、実行時に値が指定されるプレースホルダが含まれた問合せです。たとえば、次のPL/SQL文のmin_salaryは、パラメータ値のプレースホルダで、実行時に値が指定されます。

SELECT ename, job, mgr FROM emp WHERE sal < :min_salary

検索モードのデータ・パネルではADF Swingコントロール・バインディングを使用して、バインドされたADFビジネス・コンポーネント・ビュー・オブジェクトの属性のうち、queriableプロパティがtrueに設定されている属性ごとにフィールドを表示します。ビュー・オブジェクトは、ビジネス・コンポーネントにより実行される最初の問合せを定義します。

検索モード操作用のデータ・パネルを作成する最も簡単な方法は、JUNavigationBarを、そのデータ・パネルによる検索対象のADFビジネス・コンポーネント・ビュー・オブジェクトにバインドすることです。ナビゲーション・バーは、ADF SwingフォームのADF Swingコントロール・バインディングの動作を切り替えるためにユーザーが選択する「Find」ボタンを提供します。

- データ・パネル上で検索モードが有効化されている場合、このコントロールは、ADFビジネス・コンポーネント・ビュー・オブジェクトの問合せ可能属性に対するパラメータ化された問合せのための検索基準を提供します。

- 検索モードが無効化されている場合、このコントロールは、ビューオブジェクトの表示属性および編集属性へのデータ・アクセスを提供します。

検索モード・ボタンの状態は、JUNavigationBarのhasFindButtonプロパティによって制御されます(デフォルトではtrue)。

7.10 パネル内のADF Swingコントロールに対して検索モードを無効化する方法

すべてのADF Swingコントロール・バインディングで検索モードがサポートされています。検索専用のデータ・パネルを作成する場合は、フォームが、ADFビジネス・コンポーネント・ビュー・オブジェクト属性にバインドされている次のコントロールを使用して検索基準を提供するように制限します。

- JTextField: ユーザーは値を入力する必要があります。

- JCheckBox: ユーザーは、事前定義済の値の1つを選択します。

- JSlider: ユーザーは、事前定義済の値の1つを選択します。

ユーザーが検索モードを選択する場合、データ・パネルで、前述のリストにないコントロールを無効化することをお薦めします。検索モードをサポートしていないコントロールを無効化すると、ユーザーによる無効な検索基準の送信の試みが防止されます。

さらに、ナビゲーション・モードでADFリスト・バインディングを利用するUIコンポーネントは、検索モードに関与しません。ただし、データバインドされたComboBoxやJListなどナビゲーションモード・コンポーネントをパネルにドロップし、検索モードをアクティブ化すると、そのコンポーネントは無効化されず、ユーザーが、検索モードでは空に表示されるコンポーネントに意図せずにデータを表示できます。検索モードでナビゲーション・コンポーネントと他のコンポーネントとの相互作用を無効化するには、セカンダリ・イテレータを作成し、ナビゲーションモード・コンポーネントのデータ・バインディングがそのイテレータを使用するように編集できます。

検索モードでナビゲーション・コンポーネントと他のコンポーネントとの相互作用を無効化する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、ナビゲーションするパネルが含まれているレイアウト・パネルに対してJavaビジュアル・エディタを開きます。

2. Javaビジュアル・エディタで、「バインディング」タブをクリックし、「実行可能ファイル」リストで「実行可能ファイル・バインディングを作成します。」をクリックします。

3. 「アイテムの挿入」ダイアログで、イテレータを選択し、「OK」をクリックします。

4. 「イテレータ・バインディングの作成」ダイアログで、他のコンポーネントのバインド先となるデータ・コレクションを選択し、「イテレータID」に新しい名前を入力し、「OK」をクリックします。

5. 「バインディング」リストで、ナビゲーション・モードで動作するコンポーネントのバインディングをダブルクリックし、コントロール・バインディング・エディタで新しいイテレータを選択します。

7.11 検索モードでのイテレータ・バインディングに関する必知事項

イテレータ・バインディングは、基本的なデータ反復機能に加え、バインドされたデータ・コレクションと連携することにより、アプリケーション・データの例による問合せ機能の実装を単純化します。次のものが提供されています。

- 例による問合せの基準行のコレクション

- これらの問合せ基準を使用する、使用しやすい検索モード

Oracle ADFでは、各データ・コレクションに、0 (ゼロ)以上のビュー基準行のビュー基準(ViewCriteria)コレクションが関連付けられています。各ビュー基準行(ViewCriteriaRow)の属性構造は、関連するデータ・コレクション内の行と同じです。ただし、属性値はすべて文字列データ型として処理されます。このデータ型では、ユーザーは比較演算子およびワイルドカード文字を含む問合せ基準を入力できます。

たとえば、部門番号が5より大きく、部門名が文字列「ACC%」と一致するすべての部門を検索するよう指定するには、よくあるSCOTTスキーマのDEPT表に対する問合せに基づき、DeptViewコレクションに関連するビュー基準行の属性を入力します。次のようになります。

- Deptno > 5

- Dname ACC%

イテレータ・バインディングの検索モードにより、例による問合せ機能用に、ビュー条件コレクションの属性を移入する検索ページが簡単に作成できます。イテレータ・バインディングを検索モードに設定すると、関連付けられているビュー条件コレクションに対して別の行セット・イテレータを使用するよう切り替わります。つまり、検索モードが使用可能に設定されると、イテレータ・バインディングを参照するコントロール・バインディングは、現行のビュー条件行で属性を表示および更新します。同様に、検索モードになっているイテレータ・バインディングを参照する範囲バインディングでは、現行の例による問合せビュー条件行から表をレンダリングできます。

検索モードが無効である場合、イテレータ・バインディングは、データ・コレクションに対して元の行セット・イテレータを使用するよう切り替えられます。これは、イテレータ・バインディングのsetFindMode()メソッドをコールすることで明示的に、またはexecuteQuery()メソッドをコールすることで暗黙的に実行できます。

注意:

検索モードでイテレータ・バインディングの行セット・イテレータに対してcreateRow()メソッドをコールすることにより、ビュー条件行を追加作成し、続けてその属性に追加条件を移入することが可能です。デフォルトのセマンティクスでは、同じビュー条件行内の例による問合せの条件は論理的にANDで結合され、一方、異なるビュー条件行から取得した条件は論理的にORで結合されています。

実際には、複数のビュー条件行を使用することは通常ありませんが、理解しておくと機能の説明に役立ちます。ただし、検索モードに入ると、元のコレクションに行を作成できません。検索モード以外の場合のみ、ビュー条件に含まれない行を作成することが可能です。

ADFイテレータ・バインディングで、選択したバックエンド・データ・コントロールの種類に関係なく検索モード機能が提供されますが、現状ではADFビジネス・コンポーネント・データ・コントロールにかぎり、実行時にビュー基準行のビュー基準コレクションが自動的に使用されます。このイテレータ・バインディングのビュー基準機能は、ADFビジネス・コンポーネント・データ・コントロールからその基礎であるADFビュー・オブジェクトに委譲されます。このADFビュー・オブジェクトは、ビュー基準行に基づいて適切なSQL WHERE句の述語を自動的に作成することで、例による問合せ基準を実装します。

現在、他のデータ・コントロール・タイプでは、ビュー基準コレクションから例による問合せ基準を読み込み、これらの基準を適切なランタイム検索実装に変換する、カスタム・コーディングを含むサブクラス化されたデータ・コントロール実装が必要です。

ADFビジネス・コンポーネントでのビュー基準の使用方法の詳細は、JavaDocでoracle.jbo.ViewCriteriaクラスを参照してください。

7.12 JURadioButtonGroupPanelコントロールの使用方法

ラジオ・ボタン・グループは、ADF Swing JURadioButtonGroupPanelコントロールであり、ADFナビゲート・バインディングを介してビジネス・サービス・データ・コレクションの属性グループにバインドできます。ユーザーが、ラジオ・ボタンの選択を変更すると、属性を介して同じデータ・コレクションにバインドされている親パネル内のコントロールはすべて、選択されたデータ・オブジェクトから表示されます。

ラジオ・ボタン・グループをナビゲート・データ・コレクションにバインドする手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、目的のデータ・パネルまたはフォームに対してJavaビジュアル・エディタを開きます。

2. 「データ・コントロール」パネルで、ラジオ・ボタン・グループ・コントロールにバインドするデータ・コレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Radio Button Group」を選択します。
JDeveloperによって、クラス・ファイルに、JURadioButtonGroupPanelをコレクションにバインドする次のようなコードが追加されます。

jURadioButtonGroupPanel1.setModel((JUButtonGroupBinding)
panelBinding.bindUIControl("MyDataCollection", jURadioButtonGroupPanel1));

4. リスト・バインディング・エディタで、ラジオ・ボタン・パネルで使用する表示属性を選択します。

ラジオ・ボタン・グループのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでJURadioButtonGroupPanelコントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJURadioButtonGroupPanelコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
「リスト・バインディングの編集」ダイアログが表示されます。

ラジオ・ボタン・パネルのレイアウトをカスタマイズする手順は次のとおりです。

ラジオ・ボタンのデフォルト・レイアウトは、行ごとですが、パネルのrowCountおよびcolumnCountプロパティを介してそのレイアウトを変更できます。

たとえば、列のラジオ・ボタン選択を表示する手順は次のとおりです。

- rowCountを0に、columnCountを目的の列数に変更します。

7.13 JUShuttlePanelコントロールの使用方法

シャトル・コントロールは、ADF Swing JUShuttlePanelコントロールであり、ADF Swingリスト・バインディングを介してビジネス・サービス・コレクションの属性にバインドできます。JUShuttlePanelコントロールによって、ユーザーは、表示されるシャトル・リストに対して複数選択を実行できます。

フォームまたはパネルにデータバインドされたシャトル・パネルを挿入する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、Javaビジュアル・エディタでフォームまたはデータ・パネルを開きます。

2. 「データ・コントロール」パネルで、JUShuttlePanelコントロールにバインドするコレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Shuttle」を選択します。
JDeveloperによって、クラス・ファイルに、フォームと関連付けられているページ定義ファイルのDCShuttleバインディング定義を参照する次のようなコードが追加されます。

myjUShuttlePanel1.setModel((JUShuttleModel)
(panelBinding.findNestedPanelBinding("DCShuttle")));

フォームまたはパネルのシャトル・パネルのデータ・バインディングを変更する手順は次のとおりです。

1. Javaビジュアル・エディタでJUShuttlePanelコントロールが含まれるフォームまたはパネルを開きます。

2. 変更するJUShuttlePanelコントロールを右クリックし、メニューから「バインディングの編集」を選択します。
「シャトル・バインディングの編集」ダイアログが表示されます。

7.14 JUStatusBarコントロールの使用方法

ステータス・バーは、ADF Swing JUStatusBarコントロールであり、パネル・バインディングに依存して、そのパネル・バインディングを共有し、表示されているフォームまたはパネルに現在のフォーカスがあるUIコントロールのステータス情報を表示します。

フォームまたはパネルにステータス・バーを挿入する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクトで、Javaビジュアル・エディタでフォームまたはデータ・パネルを開きます。

2. 「データ・コントロール」パネルで、JUStatusBarコントロールにバインドするコレクションを、開いているフォームまたはパネルにドラッグします。

3. 子の追加ポップアップ・リストから、「Status Bar」を選択します。
JDeveloperによって、クラス・ファイルに、ステータス・バーのパネル・バインディングを定義する次のようなコードが追加されます。

myjUStatusBar1.setModel(JUStatusBar.createPanelBinding(panelBinding, jUStatusBar1));

8 ADF Swingユーザー・インタフェースでの検証の使用方法

この章では、ADF Swingアプリケーションでのクライアント・サイドの検証の使用方法について説明します。

この章には、次のセクションがあります。

- 第8.1項「イベントの検証について」

- 第8.2項「ADFコントロール・バインディングでの検証の使用方法」

- 第8.3項「ADF Swingパネルでの検証の使用方法」

8.1 イベントの検証について

JDeveloperは、次のものを使用して検証を実行します。

- ADFビジネス・コンポーネント・データ・モデル・プロジェクトで定義されているルール

- ユーザー・インタフェースでの操作時

ADF Swingアプリケーションを介して、ADF Swingフォーム上で検証を実行し、ユーザーによる誤ったデータの入力を防止します。たとえば、電話番号を必要としているフィールドに英字が入力されるのを防止する場合があります。同様に、入力されたデータを検証し、ユーザーに通知する場合もあります。

8.2 ADFコントロール・バインディングでの検証の使用方法

ユーザー・インタフェースでの検証は、コントロール・バインディングのレベルのソース・コードを介して処理されます。これを行うには、検証コードをPlainDocumentイベントとして定義し、setDocument()メソッドを使用して、特定のコントロールにそのコードを登録します。その後、ADFビジネス・コンポーネント属性アイテムにバインドしたコントロールに対してsetDocument()をコールすると、検証コードが含まれているドキュメントと連動します。例8-1は、各キーが押されたときに実行される検証を示しています。

例8-1 キーストロークごとの検証の例

//Add this code to create a document with the validation code and set it for the control

mDeptno.setDocument(new javax.swing.text.PlainDocument()
{
public void insertString(int offs, String str, javax.swing.text.AttributeSet a) throws    javax.swing.text.BadLocationException
{
StringBuffer buf = new StringBuffer(str);
int size = buf.length();
char c;
for (int i = 0; i < size; i++)
{
c = buf.charAt(i);
if (!Character.isDigit(c))
{
Toolkit.getDefaultToolkit().beep();
buf.deleteCharAt(i);
}
}

super.insertString(offs, buf.toString(), a);
}

});

/*Here is the code that is generated for you which will set the control binding for the document. This will work with the document you defined above. */

mDepartmentId.setDocument((Document)panelBinding.bindUIControl("DepartmentId", mDepartmentId));

8.3 ADF Swingパネルでの検証の使用方法

panelBindingオブジェクトは、UIとADFビジネス・コンポーネント・データ・モデル・レイヤーとの間のリンクの管理を担当しており、アクション時にイベントをトリガーできます。このタイプの検証では、ユーザーがフィールドにデータを入力し、その後、別のフィールドに移動したときに検証を実行できます。このタイプの検証は、ビジネス・コンポーネントで定義されているビジネス・ルールに違反することなく、ユーザーに通知が必要なパネルで実行できます。

たとえば、ビジネス・コンポーネントで定義されている100から1000までの範囲を持つ給与について考えてみます。給与フィールドが500未満に設定されている場合、ユーザーに警告し、フィールドを強調表示する必要があります。この場合、値が設定されているときに検証が必要です。panelBindingオブジェクトは、beforeSetAttribute()がコールされたときに、イベントをトリガーします。

ADF Swingパネルに検証を設定する手順は次のとおりです。

1. パネルをJavaビジュアル・エディタで開きます。

2. 「構造」ウィンドウの「その他」を開き、「panelBinding」を選択します。

3. 「プロパティ」ウィンドウで「イベント」セクションを開き、「beforeSetAttribute」フィールドにイベント名を入力します。

4. Javaソース・エディタで、例8-2に示すサンプルのように、生成されたイベント・ハンドラに検証コードを追加します。

例8-2 生成されたイベント・ハンドラに追加されたコード

if (e.getAttributeName().equals("Salary"))
{
Object val = e.getNewValue();
if (val != null)
{
Integer n = new Integer(val.toString());
if (n.intValue() < 500)
{
mSalary.setBackground(Color.red);
throw new oracle.jbo.JboException("That's a bit low!");
}
}
}

9 ADF Swingログイン・ダイアログでの作業

この章では、ログイン・ダイアログを作成し、そのログイン・ダイアログを使用してADF Swingアプリケーションを実行する方法について説明します。ADF Swingログイン・ダイアログは、ADFビジネス・コンポーネント・プロジェクトと連携するように最適化されています。

この章の内容は次のとおりです。

- 第9.1項「ADF Swingログイン・ダイアログについて」

- 第9.2項「ログイン・ダイアログを作成する方法」

- 第9.3項「ログイン・ダイアログを使用してアプリケーションを実行する方法」

- 第9.4項「ログイン・ダイアログを使用しないでアプリケーションを実行する方法」

- 第9.5項「ログイン・ダイアログのコードのカスタマイズに関する必知事項」

- 第9.6項「JDBC接続と連動するようにログイン・ダイアログを変更する方法」

9.1 ADF Swingログイン・ダイアログについて

ADFビジネス・コンポーネント・データ・モデルに対して作成したADF Swingアプリケーションを実行するために、ユーザー名およびパスワードを必要とするユーザー・インタフェース・プロジェクトにカスタマイズ可能なログイン・ダイアログを追加できます。現在、ログイン・ダイアログは、他のビジネス・サービスに対してサポートされていません。

デフォルトでは、生成されたログイン・ダイアログは、Oracle WebLogic Serverコンテナによって強制される認証と連動し、SECURITY_PRINCIPALおよびSECURITY_CREDENTIALSプロパティを使用します。ただし、これらのセキュリティ・プロバイダ・プロパティを使用せずに、DB_USERNAME_PROPERTYおよびDB_PASSWORD_PROPERTYプロパティを必要とするJDBC接続と連動させる場合は、生成されたファイルをカスタマイズできます。

フレームを生成してADF Swingアプリケーションを実行する場合は、ユーザー・インタフェース・プロジェクトにログイン・ダイアログ・クラスを追加します。適切なADF Swingブートストラップ・コードが含まれているJFrameを生成するために、ADF Swingの次の2つのウィザードを使用できます。

- ADF Swingフォームの作成ウィザード: 「ファイル名」ページの「ログイン・ダイアログの生成」をクリックします。

- 「ADF Swingの空のフォームの作成」ダイアログ: 「ログイン・ダイアログの生成」をクリックします。

ログイン・ダイアログの生成オプションを選択してこれらのいずれかを実行すると、JDeveloperによって次のように実行されます。

- アプリケーション・ブートストラップ・コードのアプリケーション・オブジェクト・コンストラクタが、JCLoginDialogのインスタンスを作成するように次のように変更されます。
BindingContext ctx = new BindingContext(); ctx.put(DataControlFactory.APP_PARAM_ENV_INFO, new JCLoginDialog());

- JCLoginDialog.javaファイルがユーザー・インタフェース・プロジェクトに追加され、それによってEnvInfoProviderインタフェースが実装されて、実行時ログイン・ダイアログが提供されます。このウィザードによって、同じ名前の既存のJCLoginDialog.javaファイルが上書きされることはありません。

生成されたログイン・ダイアログ(JCLoginDialog.java)によってインタフェースのメソッドが実装されるため、出発点となるコードとして利用して、変更できます。JCLoginDialog.javaファイルを使用すると、ログイン・ダイアログの次のどのような局面もカスタマイズできます。

- その外観(イメージを追加し、レイアウトを変更することによる)

- ADFビジネス・コンポーネント・アプリケーション・モジュールに接続するための構成パラメータ

- データベースに接続するための接続パラメータ

- 接続に失敗した後に接続を再試行する回数の指定

9.2 ログイン・ダイアログを作成する方法

ADF Swingフォームの作成ウィザードまたは「ADF Swingの空のフォームの作成」ダイアログを使用して、ADF Swingアプリケーションに、生成されたログイン・ダイアログを追加できます。生成したログイン・ダイアログは、Oracle ADFセキュリティ・フレームワークに依存してプリンシパルと資格証明を認証するため、JDBC接続を使用しません。

ADF Swingのログイン・ダイアログをプロジェクトに追加するには、次のようにします。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを選択し、ADF Swingフォームの作成ウィザードまたは「ADF Swingの空のフォームの作成」ダイアログを起動します。

2. フォーム・ウィザードの最終ページで、「ログイン・ダイアログの生成」を選択します。

3. 「終了」をクリックすると、ウィザードが完了します。

9.3 ログイン・ダイアログを使用してアプリケーションを実行する方法

Oracle WebLogic ServerおよびADFセキュリティ認証でログイン・ダイアログを使用するには、ADFセキュリティの構成ウィザードを使用して、ADFセキュリティを使用するようにADF Swingアプリケーションを構成する必要があります。

ADF認証を使用するようにADF Swingクライアントを構成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、ADF認証を必要としているユーザー・インタフェース・プロジェクトを選択し、「アプリケーション」→「保護」→「ADFセキュリティの構成」を選択します。

2. ADFセキュリティ・ウィザードで、「ADF認証および認可」を選択します。

3. 「終了」をクリックします。

ADF Swingフォームのログイン・プロバイダを有効化するには、次のようにします。

1. 「アプリケーション」ウィンドウで、ユーザー・インタフェース・プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

2. 「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」をクリックし、ユーザー・インタフェース・プロジェクトと関連付けられているライブラリの現行リストを表示します。

3. 「ライブラリの追加」をクリックします。

4. ライブラリのリストで、BC4J Securityを見つけ、それをリストに追加します。
そのようにしない場合、ログイン・ダイアログの使用時にエラー・メッセージが表示されます。BC4J Securityライブラリには、プロジェクト内でADF認証を使用するために必要なJARファイルが含まれています。

5. 「OK」をクリックしてプロジェクト設定を保存します。

6. ユーザー・インタフェース・プロジェクトでEJBセッションBeanとして配布されるADFビジネス・コンポーネントにアクセスする必要がある場合は、グループ内のユーザーに読取り/書込みアクセス権を付与する必要があります。

ユーザー・アカウントは、ADF Swingアプリケーションを基準とした./src/META-INFディレクトリにあるjazn-data.xmlファイルに格納されています。デフォルト名の1つはadmin/welcomeです。ログオン・ダイアログをテストするには、デフォルト名の1つを使用します。かわりに、独自のユーザーをjazn-data.xmlに追加できます。

アカウントの追加後、最初にサーバー・インスタンスが起動されたときに、jazn-data.xmlファイルによってパスワードが暗号化されます。パスワードが必ず暗号化されるようにするには、パスワードの前に!を追加します。たとえば、パスワードWELCOMEを暗号化するには、それを!WELCOMEとして定義します。

ユーザーのユーザー名と資格証明のペアを使用するには、例9-1のコードをアプリケーション内で使用します。

例9-1 ユーザー名と資格証明のペアのコード

Hashtable h = panelBinding.getBindingContext().getDefaultDataControl(). getApplicationModule().getSession().getEnvironment();

String username = h.get(JboContext.SECURITY_PRINCIPAL);
String credential = h.get(JboContext.SECURITY_CREDENTIALS);
…

9.4 ログイン・ダイアログを使用しないでアプリケーションを実行する方法

ADF Swingのウィザードの1つを実行してADF Swingフレームを生成するが、ADF Swingユーザー・インタフェース・プロジェクトにログイン・ダイアログを生成しない(ウィザード内の「ログイン・ダイアログの生成」を選択解除したままにする)場合、「データベース接続の編集」ダイアログの「パスワードの保存」を選択することでアプリケーションを依然として実行できます。この場合、アプリケーションを実行すると、JDeveloperによって、ログインが要求されることなくフレームが表示されます。

9.5 ログイン・ダイアログのコードのカスタマイズに関する必知事項

EnvInfoProviderインタフェースの必須のメソッドを実装する開始コードを変更する場合、ユーザー・インタフェース・プロジェクトでJCLoginDialog.javaファイルを生成します。このインタフェースは、ADFビジネス・コンポーネント接続手法で使用され、実行時にログオン・パラメータを変更するためのフックを提供します。

EnvInfoProviderインタフェースでは、次のメソッドが実装されることが想定されています。

public void getInfo(String info, Object connEnvironment)

このメソッドは、データベースに接続する前にコールされます。これにより、すべての接続パラメータでハッシュテーブルを更新(および返すこと)ができます。

Public int getNumOfRetries()

このメソッドは、ビジネス・コンポーネントが接続を失敗後に試行する回数を決定します。接続情報は、毎回、EnvInfoProviderから取得されます。

注意:

前のリリースではメソッドpublic void modifyInitialContext(Object initialContext)が使用されましたが、それは非推奨になりました。それは、空のメソッドとして実装できます。

9.6 JDBC接続と連動するようにログイン・ダイアログを変更する方法

生成したADF Swingログイン・ダイアログを変更し、Oracle ADF認証のかわりにJDBC接続と連動させることができます。

生成されたADF Swingログイン・ダイアログをJDBC接続用に変更する手順は次のとおりです。

1. ADF Swingフォームの作成ウィザードまたは「ADF Swingの空のフォームの作成」ダイアログを使用して、ユーザー・インタフェース・プロジェクトにログイン・ダイアログを追加します。
詳細は、第9.2項「ログイン・ダイアログを作成する方法」を参照してください。

2. ユーザー・インタフェース・プロジェクトで、JCLoginDialog.javaファイルをダブルクリックします。

3. Javaソース・エディタで、例9-2に示すようにそのコードをコメント・アウトします。

例9-2 JCLoginDialog.javaでのコメント・アウト

/*
String securityEnforceStr =
((String)((Hashtable)connEnvironment).get(PropertyMetadata.ENV_SECURITY_ENFORCE .pName));
if (securityEnforceStr == null
(securityEnforceStr != null && PropertyConstants.SECURITY_ENFORCE_NONE.equals(securityEnforceStr)))
{
return null;
}
*/

4. [Ctrl] + [F]キーを押し、ソース・エディタで「検索」ダイアログを表示します。

5. この検索を実行し、次のように操作を置換します。
JboContext.SECURITY_PRINCIPALを
Configuration.DB_USERNAME_PROPERTYに変更します。

6. 「検索」ダイアログを再度表示し、別の検索を実行して、次のように操作を置換します。
JboContext.SECURITY_CREDENTIALSを
Configuration.DB_PASSWORD_PROPERTYに変更します。

注意:

これらの変更はファイル内に2箇所あります。1つは、ハッシュ・テーブルから読み取るとき、もう1つは、ログイン・ダイアログのフィールドからユーザー名とパスワードを設定するときです。

7. 変更内容をJCLoginDialog.javaに保存します。

8. データ・モデル・プロジェクトを作成するときにパスワードを保存した場合(デフォルト)、これらの設定を変更する必要があります。「データベース」ウィンドウで、接続を右クリックして、「プロパティ」を選択します。

9. 「データベース接続の編集」ダイアログで、パスワードを削除し、「パスワードの保存」を選択解除します。

これで、ADF Swingアプリケーションを実行できるようになりました。bc4j.xcfgファイルで指定されているJDBC接続がある場合、アプリケーションによってダイアログが自動的に起動されます。

10 ADF Swingアプリケーションの実行時パフォーマンスの最適化

この章では、ADF Swingアプリケーションの実行時のパフォーマンスを向上する方法について説明します。最適なパフォーマンスを得るためのデータ同期手法だけでなく、ADF SwingアプリケーションでのADFビジネス・コンポーネント属性のフェッチを制限する手法について説明します。

この章には、次のセクションがあります。

- 第10.1項「ADF Swingアプリケーションの実行時パフォーマンスの最適化について」

- 第10.2項「ADF SwingからADFビジネス・コンポーネントへの更新を遅延する方法」

- 第10.3項「同期モード・プロパティに関する必知事項」

- 第10.4項「ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法」

10.1 ADF Swingアプリケーションの実行時パフォーマンスの最適化について

ADF Swingコードでメソッド・コールを行い、クライアントとリモート・デプロイメント・モードのADFビジネス・コンポーネント・ビジネス・サービスとの間のネットワーク・トラフィックを最適化できます。

10.2 ADF SwingからADFビジネス・コンポーネントへの更新を遅延する方法

JDeveloperのデザイン・タイム・ツールで作業しているユーザーは、デフォルトでこの項で説明する最適化を得られます。

ただし、JDeveloperの外部で、ADFビジネス・コンポーネントに対して提供されているAPIを使用してアプリケーションを開発しており、JDeveloperデザイン・タイムを使用してADF Swingクライアントを作成していない場合は、これらの最適化の実行が必要になることがあります。

ADFビジネス・コンポーネント・アプリケーション・モジュールのデータ同期モードをバッチに設定することで、ADFビジネス・コンポーネント・クライアント・アプリケーションからリモートにデプロイされたビジネス・コンポーネントに送信される実行頻度の少ない検証を犠牲にすると、ネットワーク・トラフィックを向上させることができます。バッチ・モードとは、ユーザーによって行われた属性値の変更が、その変更の送信を強制するアクションをユーザーが実行するまでクライアント層に保持されることを意味します。バッチ・モードは、遅延同期モードとも呼ばれ、ネットワーク上のトリップ回数を削減します。その結果、ADFビジネス・コンポーネントによる属性の検証が遅延します。

データ同期は、デフォルトでは"即時"モードであり、変更は行われるとただちに適用され、その結果、属性値は即時に検証されます。

注意:

ローカル・モード・デプロイメント(クライアントとADFビジネス・コンポーネントが同じVM上に常駐する)では、同期モードが常に"即時"です。

JDeveloper内で、クライアントの同期設定を変更する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、表示モードを「ディレクトリの表示」に変更し、ユーザー・インタフェース・プロジェクトを開き、DataBindings.cpxファイルを選択します。
DataBindings.cpxファイルが、ユーザー・インタフェース・プロジェクトのadfmsrcフォルダに追加されます。

2. 「構造」ウィンドウで、dataControlUsagesを開き、目的のデータ・コントロールを選択します。

3. 「プロパティ」ウィンドウで「その他」セクションを開き、「syncMode」フィールドのドロップダウン・リストから目的の設定を選択します。

アプリケーション・モジュールの同期モードを設定する手順は次のとおりです(JDeveloperデザイン・タイムの外部の場合)。

- 次にようにApplicationModuleImplクラスでsetSyncMode()をコールします。
yourAm.setSyncMode(ApplicationModule.SYNC_IMMEDIATE);

ネットワークの最適化を犠牲にしてADFビジネス・コンポーネントによる属性検証の制御を最大にする場合は、それをSYNC_IMMEDIATEに設定できます。たとえば、このモードでは、クライアントによって1人の従業員に10個の属性が設定されている場合、新しい値ごとに検証を提供するために、コードで10個のsetAttribute()メソッドをコールすることになります。

または

yourAm.setSyncMode(ApplicationModule.SYNC_LAZY);

それをSYNC_LAZYに設定すると、ネットワーク上のトリップ回数が削減され、アプリケーションを最適化することができます。このモードでは、クライアント側の属性設定要求は、データが変更されたときではなく、次にクライアントがイベントをADFビジネス・コンポーネントに送信するときまでバッファされます。アプリケーション・コードをさらに変更する必要はありません。たとえば、クライアントによって1人の従業員に10個の属性が設定されている場合、コードによってsetAttribute()メソッドが呼び出されるのは、クライアントが次のことを実行した後のみです。

- 現在の行を変更する。

- postChanges()またはcommit()メソッドをコールする。

- 明示的にsyncメソッドをコールする。

- その行に対してvalidate()メソッドをコールする。

ApplicationModuleImplを拡張するクラス内である場合は、それによってApplicationModuleインタフェースが実装されるため、単に例10-1に示すコードを追加できます。

例10-1 クラスによってApplicationModuleImplが拡張される場合のコード

ApplicationModule yourAm = panelBinding.getApplication().getApplicationModule();
yourAm.setSyncMode(SYNC_LAZY);

ただし、別のクラス内(たとえば、クライアント・コード内)である場合は、例10-2のように、それが出現するインタフェースでその定数を修飾する必要があります。

例10-2 別のクラス内の場合のコード

ApplicationModule yourAm = panelBinding.getApplication().getApplicationModule();
yourAm.setSyncMode(ApplicationModule.SYNC_LAZY);

ADF Swingブートストラップ・コードで、データ・コントロール・オブジェクトを作成後、ただちにsetSyncMode()をコールする必要があります。または、getApplication()をコールし、ADF Swingパネルのコンストラクタで同期モードを設定できます。選択する場所は、同期モードをアプリケーション全体で保持するのか、パネルのレベルで変更するのかによって異なります。

10.3 同期モード・プロパティに関する必知事項

ApplicationModuleに対してプログラムでデータの同期を設定することに決定した場合は、ADFビジネス・コンポーネント・データ・コントロールのsyncModeプロパティ設定で行われる相互作用に注意する必要があります。存在する有効な組合せは次の3つのみです。

- am.setSyncMode(SYNC_IMMEDIATE) + syncModeプロパティが"バッチ"である。この場合、バッチ・モードになります。すべての更新は、次のam.sync()まで遅延されます。これは、bindingContainer.refresh()をコールすることで適切なときにアプリケーションによって呼び出される必要があります。また、更新はRollbackおよびCommitアクションが開始されたときに自動的に行われます。
SYNC_IMMEDIATE +"Batch"の組合せ。ADF BCプロジェクトを作成する際のJDeveloper 10.1.2以降におけるデフォルトです。これは、JDeveloper 10.1.2以降で3層ADF Swingアプリケーションに対して使用する組合せです。

- am.setSyncMode(SYNC_LAZY) + syncModeプロパティが"即時"である。この場合、即時モードになり、属性の設定メソッド・コールは、次の行のナビゲーションまで遅延されます。
SYNC_LAZY +"即時"の組合せは、3層モードでデプロイされていて10.1.2以降にアップグレードされるADF Swing 9.0.5およびそれ以前のアプリケーションに対する設定です。

- am.setSyncMode(SYNC_IMMEDIATE) + syncModeプロパティが"即時"である。この場合、即時モードになります。
SYNC_IMMEDIATE +"即時"の組合せは、データベースとの対話レベルが非常に高いアプリケーションや、即時検証が必要な状況に適しています。この場合は、アプリケーションを即時モードで実行し、データが即時に同期化されるようにしてください。ADF Swingアプリケーションに対してはお薦めしません。

10.4 ADF SwingでのADFビジネス・コンポーネント属性のフェッチを制限する方法

JDeveloperのデザイン・タイム・ツールで作業しているユーザーは、デフォルトでこの項で説明する最適化を得られます。

ただし、JDeveloperの外部で、ADFビジネス・コンポーネントに対して提供されているAPIを使用してアプリケーションを開発しており、ビュー・オブジェクト・メタデータ(XMLファイル)を作成しない場合は、これらの最適化の実行が必要になることがあります。

クライアントが使用するビュー・オブジェクト属性のリストを指定することで、ADFビジネス・コンポーネント・クライアント・アプリケーションおよびリモートにデプロイされているビジネス・コンポーネントの起動時間を最適化できます。APIにコーディングすることでメタデータなしでプロジェクトを作成する場合、フォームによって使用される属性のみのリストでfetchAttributeProperties()をクライアント・フォームのブートストラップ・コードに追加します。このメソッド・コールがない場合、クライアント・フォームは、1回のネットワーク・ラウンドトリップで、アプリケーション・モジュールで指定されているビュー・オブジェクトのすべての属性のすべてのコントロール・ヒント・プロパティ(たとえば、属性の書式やラベルなど)がフェッチされます。

たとえば、ADF Swingフォームのバインドされたビュー・オブジェクトの一部の属性を使用しない場合、fetchAttributeProperties()メソッドで、ADF Swingフォームは、フォームのレイアウトに必要な情報のみをフェッチし、不要な属性は無視します。

注意:

ローカル・モード・デプロイメント(クライアントとADFビジネス・コンポーネントが同じVM上に常駐する)では、属性プロパティのフェッチはサポートされていません。

属性プロパティの取得を最短時間にする手順は次のとおりです(JDeveloperデザイン・タイムの外部の場合)。

- ApplicationModuleでfetchAttributeProperties()をコールします。
このメソッドは、引数として、ビュー・オブジェクト名のリストと、ビュー・オブジェクトごとの属性名のリストを取ります。リストには、属性がすべて含まれていることも一部のみが含まれていることもあります。フォームで、ビュー・オブジェクトのすべての属性が必要とされている場合、属性引数としてnullを指定できます。この場合、フォームでビュー・オブジェクトのすべての属性が使用されるため、起動時間が大幅に短縮されないこともあります。

注意:

ADF Swingフォームまたはパネルのウィザードを使用して、完全なフォームを生成する場合、fetchAttributeProperties()メソッドが追加されます。

例10-3に示すように、ADF Swingブートストラップ・コードで、データ・コントロール・オブジェクトを作成後、ただちにfetchAttributeProperties()をコールする必要があります。次の例では、最初のビュー・オブジェクトの3個の属性のカスタム・プロパティおよび2番目のビュー・オブジェクトの5個の属性がダウンロードされます。

例10-3 ADF Swingブートストラップ・コードにおけるfetchAttributePropertiesのコール

// bootstrap application
JUMetaObjectManager.setBaseErrorHandler(new JUErrorHandlerDlg());
JUMetaObjectManager mgr = JUMetaObjectManager.getJUMom();
mgr.setADF SwingDefFactory(null);
BindingContext ctx = new BindingContext();
ctx.put(DataControlFactory.APP_PARAM_ENV_INFO, new JUEnvInfoProvider());
ctx.setLocaleContext(new DefLocaleContext(null));
HashMap map = new HashMap(4);
map.put(DataControlFactory.APP_PARAMS_BINDING_CONTEXT, ctx);
mgr.loadCpx("DataBindings.cpx", map);
DCDataControl app = (DCDataControl)ctx.get("model_AppModuleDataControl");
app.setClientApp(DCDataControl.JCLIENT);
app.getApplicationModule().fetchAttributeProperties(new String[]
{"VO1", "VO2"}, new String[][]
{
{"VO1Attr1", "VO1Attr2", "VO1Attr3"},
{"VO2Attr1", "VO2Attr2", "VO2Attr3", "VO2Attr4", "VO2Attr5"}
}, null);

...

fetchAttributeProperties()をコールすることで、getFormat()やgetLabel()などのプロパティ・メソッドが、フォームが作成されるたびにADFビジネス・コンポーネント属性定義に対してコールされることを防止できます。

11 ADF SwingアプリケーションとJava Web Startの使用方法

この章では、JDeveloperでJava Web StartとともにADF Swingアプリケーションを実行する方法について説明します。Java Web Startは、ADF SwingアプリケーションをWebサーバーにデプロイするためのツールであり、ユーザーはこのWebサーバーからクライアント・マシンにアプリケーションをダウンロードして実行できます。

この章には、次のセクションがあります。

- 第11.1項「Java Web Startでの作業について」

- 第11.2項「ADFビジネス・コンポーネント・ランタイムのプロパティを定義する方法」

- 第11.3項「ランタイム構成情報を設定する方法」

- 第11.4項「Java Web Start JNLP定義を作成する方法」

- 第11.5項「JNLP定義の作成時の処理内容」

- 第11.6項「JDeveloperでJava Web StartとともにADF Swingアプリケーションを実行する方法」

11.1 Java Web Startでの作業について

Java Web Startは、Webサーバー上でのADF Swingアプリケーションの管理を可能にするアプリケーション・デプロイメント・ソフトウェアです。デプロイすると、ユーザーは、Java Web Startを使用してクライアント・マシンにアプリケーションをダウンロードして実行できます。ADF SwingアプリケーションまたはアプレットをWebサーバーにデプロイする前に、JDeveloperおよび統合WebLogic Server内でJava Web Startを使用し、ユーザーのアプリケーション実行をシミュレーションできます。その後、JDeveloperのJava EE Webデプロイ・プロセスを使用して、本番アプリケーション全体をWebサーバーに移動できます。

Java Web Startは、アプリケーション・デプロイメント・テクノロジです。JDeveloperでは、Java Web Startテクノロジの基盤になる、XMLベースのJNLP (Java Network Launching Protocol)定義の作成がサポートされています。JDeveloperでJava Web Startと「Java Web Startファイルの作成」ダイアログを使用すると、ADF Swingアプリケーションおよびアプレットを設定して、それらをWebサーバーで管理しながら、クライアント・マシンにダウンロードして実行できるようにすることができます。

JDeveloperのJava Web Startを使用してADF Swingアプリケーションを起動するには、このWebサイトhttp://www.oracle.com/technetwork/java/javase/tech/index-jsp-136112.htmlからJava Web Startソフトウェアをダウンロードしてインストールする必要があります。ADF Swingアプリケーションのユーザーも、それぞれのマシンにソフトウェアをインストールする必要があります。

11.1.1 Java Web Startテクノロジ

アプレットのアプローチがWebを中心にしたJavaアプリケーションのデプロイであるのに対し、Java Web StartではWebブラウザに依存せずにアプリケーションのJARファイルのダウンロードが行われます。Java Web StartではWebブラウザを介してJava Web Start JNLPディスクリプタがダウンロードされた後で、アプリケーション・リソースがダウンロードされます。JNLPディスクリプタによってJava Web Startが実際のダウンロードを起動し、実行します。

関連するテクノロジは次のとおりです。

- Webサーバー: JNLP対応JSPファイル、クライアント用JARファイル、中間層、およびランタイム・ライブラリが格納されます。

- アプリケーション・サーバー(オプション): 中間層がクライアントに対してリモートで実行される場合にのみ必要です。たとえば、EJBセッションBeanの場合。

- Webブラウザ(オプション): Java Web Startを起動するJSPページをダウンロードします。その後、Java Web Startによって、従属リソースがダウンロードされ、アプリケーションまたはアプレットが起動されます。Java Web Startは、次のようなコマンドを使用して、ブラウザを使用せずに独立して実行することもできます。
javaws http://localhost/myapp/test.jnlp

- Webブラウザ: オプション。ただし、Java Web Startの起動とダウンロードの開始に便利です。HTMLファイルに、JNLP対応のJSPページへのリンクが含まれている場合に使用されます。ユーザーがリンクをたどると、それによって、背後でJava Web Startが実行されます。

Java Web Startソフトウェアをユーザーのマシンに一度インストールすると、個々のユーザーは、単にWebページ・リンクをクリックすることでADF Swingアプリケーションおよびアプレットを実行できます(適切なファイルが「ADF Swing」ダイアログで生成されます)。アプリケーションが実行されたらWebブラウザは閉じることができ、アプリケーションは引き続き機能します。

アプリケーションがコンピュータにない場合、Java Web Startはアプリケーション・ライブラリのあるWebサーバーから必要なすべてのファイルを自動的にダウンロードします。そして、デスクトップ上のアイコンやブラウザ・リンクからいつでもアプリケーションを再起動できるように、ファイルをクライアント・コンピュータにキャッシュします。Java Web Startは必要に応じて更新を行うので、常に最新バージョンのアプリケーションがユーザーに提示されます。

11.1.2 Java Web Startと統合WebLogic Server

JDeveloperは、統合WebLogic Serverを備えています。これを使用すると、Java Web Startで使用するWebアプリケーション・アーカイブのデプロイおよびダウンロードのプロセスをシミュレーションできます。JDeveloperでは、Java EEのデプロイメント・プロファイルの規則に従って、クライアント・マシンで実行されるコンポーネントのアーカイブ(シンプル・アーカイブ)とWebサーバーにデプロイされるコンポーネントのアーカイブ(Webアプリケーション・アーカイブ)が行われます。

「Java Web Startファイルの作成」ダイアログを完了したら、Antビルド・ファイルctbuild.xmlを実行して、JDeveloperのセットアップを完了し、JARファイルに署名する必要があります。

注意:

統合WebLogic Serverを使用するために、生成されたclient_war.deployプロファイルをデプロイする必要はありません。JDeveloperにはデフォルトのweb.xml定義があり、それによってJDeveloperのmyworkフォルダのpublic_htmlの内容が指定されます。

JARファイルに署名したら、生成された.jspファイルを使用して、JDeveloperでJava Web Startソフトウェアを起動できます。Java Web Startでは、.jnlpファイルで識別されたコンポーネントがダウンロードされます。.jnlpファイル内の別の定義では、ADF Swingをアプリケーションとして実行するのか、セキュアなアプレットとして実行するのかが特定されます。Java Web Startを起動し、ダウンロードを完了したら、Webブラウザを閉じてアプリケーションやアプレットの実行を続けることができます。

11.1.3 Java Web StartとOracle WebLogic Server

Oracle WebLogic Serverをデプロイする準備ができたら、前に生成したctbuild.xmlアーカイブ・ファイルを使用して、ADF Swingアプリケーションで必要とされる各種ランタイム・ライブラリのコンテキスト・ルートを設定する必要があります。これらのライブラリは、アプリケーションの実行に必要であり、HTTPを介してアクセス可能である必要があります。(たとえば、1つのコンテキスト・ルートはbc4jであり、これによってbc4jmt.jarファイルがhttp://mymachine:8888/bc4j/lib/bc4jmt.jarとしてダウンロードできるようになります)。

ADF SwingアプリケーションをOracle WebLogic Serverにデプロイするには、生成されたclient_war.deployファイルを使用してクラスをセットアップします。

11.2 ADFビジネス・コンポーネント・ランタイムのプロパティを定義する方法

ADF Swingフォームを実行してモデル・レイヤーにアクセスする場合、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトに、デプロイメント・シナリオ用のアプリケーション・モジュール接続を指定するランタイム構成(bc4j.xcfg)ファイルが含まれている必要があります。

JDeveloper内でADF Swingアプリケーションを実行する場合、アプリケーションは、デフォルトのローカル構成を使用します。

後で、ADFビジネス・コンポーネント・デプロイメント・シナリオを変更または新しく作成する場合、ランタイム構成を編集し、接続情報を更新できます。

注意:

アプリケーション・モジュール・ランタイム構成を作成しない場合は、データ・モデル・プロジェクトのbc4j.xcfgファイルにより、JDeveloper内でADF Swingフォームを実行可能にするデフォルトの構成が定義されます。デフォルトの構成localは、ビジネス・コンポーネントおよびADF Swingアプリケーションが同じVM内で実行されることを前提としているため、ローカル・モード・デプロイメントとも呼ばれます。

構成を作成するには、次のようにします。

1. 「アプリケーション」ウィンドウで、データ・モデル・プロジェクトの「アプリケーション・ソース」フォルダの「model」パッケージを開き、アプリケーション・モジュール・ノードをダブルクリックします。

2. 概要エディタの「構成」ナビゲーション・タブをクリックし、「新規構成オブジェクトの作成」をクリックします。

3. 「構成の編集」ダイアログで、「アプリケーション・モジュール」タブをクリックし、中間層サーバー・タイプと前に定義した接続を選択します。
詳細は、「ヘルプ」をクリックしてください。

構成を編集する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・モデル・プロジェクトの「アプリケーション・ソース」フォルダの「model」パッケージを開き、アプリケーション・モジュール・ノードをダブルクリックします。

2. 概要エディタの「構成」ナビゲーション・タブをクリックし、リストから、編集する構成を選択し、「編集」をクリックします。

3. 「構成の編集」ダイアログで、「アプリケーション・モジュール」タブをクリックし、中間層サーバー・タイプと前に定義した接続を選択します。
詳細は、「ヘルプ」をクリックしてください。

4. 「構成の編集」ダイアログで別の「中間層サーバー・タイプ」オプションを選択し、構成ファイルで指定されているデプロイメント・プラットフォームを変更した場合は、次のようにデータ・モデル・プロジェクトを更新して新規プラットフォーム用のライブラリを追加する必要があります。

- データ・モデル・プロジェクトのデプロイメント・アーカイブを作成します。

- 「アプリケーション」ウィンドウで、デプロイメント・アーカイブ・フォルダを開きます。

- ライブラリを更新するには、CommonアーカイブおよびMiddle Tierアーカイブ上の「projectname.jarに配布」を選択します。

注意:

構成にアクセスするときは、アプリケーション・モジュール用のADFデータ・コントロールを使用しますが、構成情報はbc4j.xcfgファイルに記録されます。このファイルは「アプリケーション」ウィンドウでは非表示になっており、アプリケーション・モジュールを右クリックして「構成」を選択すると表示されます。

ユーザー・インタフェース・プロジェクトで新しい構成を参照する場合、DataBindings.cpxファイルを編集する必要があります。

ADF Swingクライアントでデータ・モデル構成を参照する手順は次のとおりです。

1. ユーザー・インタフェース・プロジェクト・フォルダでDataBindings.cpxノードを見つけます。

2. 「DataBindings.cpx」ノードを選択して、「構造ウィンドウ」を表示します。

3. 「構造」ウィンドウで、dataControlUsagesノードを開いて、AppModuleDataControlノードを選択します。

4. 「プロパティ」ウィンドウで「その他」セクションを開き、「構成」フィールドのドロップダウン・リストから目的の構成を選択します。

11.3 ランタイム構成情報を設定する方法

ADF Swingアプリケーションを実行する前に、アプリケーションのランタイム構成情報を設定する必要があります。アプリケーションでは、ランタイム構成を決定するために次のファイルが必要です。

- アプリケーション・モジュール接続およびビジネス・コンポーネントのデプロイメント・シナリオを指定する、データ・モデル・プロジェクト内のADFビジネス・コンポーネント構成ファイル(bc4j.xcfg)。

- ADF Swingフォームで使用されるアプリケーション・モジュールおよびADFビジネス・コンポーネント・ランタイム構成を指定する、ユーザー・インタフェース・プロジェクト内のクライアント・データ・モデル定義ファイル(DataBindings.cpx)。

ランタイム情報を使用する方法は2つあります。

- JDeveloperでADF Swingアプリケーションをテストする場合

- 本番用にADF Swingアプリケーションをデプロイする場合

ケースごとに個別のADFビジネス・コンポーネント構成およびクライアント・データ・モデル定義を作成することが必要になります。

ADF Swingアプリケーション用のランタイム構成情報を設定する手順は次のとおりです。

1. アプリケーション・モジュール接続およびビジネス・コンポーネントのデプロイメント・シナリオを指定する、ADFビジネス・コンポーネント・ランタイム構成を(bc4j.xcfgファイル内に)作成します。
詳細は、第11.2項「ADFビジネス・コンポーネント・ランタイムのプロパティを定義する方法」を参照してください。

2. ADF Swingフォームで使用されるアプリケーション・モジュールおよびビジネス・コンポーネント・ランタイム構成を指定する、ADF Swingデータ・モデル定義を作成します。
詳細は、第2.6項「クライアント・データ・モデルの定義の作成方法」を参照してください。

3. ADF Swingウィザードを実行し、ADF Swingフォームまたはデータ・パネルを生成します。

4. ウィザードの「データ・モデル」ページで、前に作成したクライアント・データ・モデル定義を選択します。
詳細は、第2.1.1項「ADF Swingデザインタイム・ウィザード」を参照してください。

注意:

また、「新規」をクリックして、別のアプリケーション・モジュールおよび選択したランタイム構成に基づいてデータ・モデル定義を作成できます。

11.4 Java Web Start JNLP定義を作成する方法

「Java Web Startファイルの作成」ダイアログを使用してJSPページを作成します。このページは、JNLP定義を動的に生成するためにユーザーが簡単にWebブラウザから実行できます。ユーザーが、JNLPファイルを起動し、クライアント・マシンへのアプリケーションのダウンロードを開始します。

注意:

「Java Web Startファイルの作成」ダイアログを使用する前に、アプリケーションのランタイム構成情報を設定する必要があります。開発中に、デフォルトのlocalモード・デプロイメント構成を使用して、リモート・デプロイメント・シナリオで発生する可能性があるセキュリティの競合を回避します。

詳細は、第11.3項「ランタイム構成情報を設定する方法」を参照してください。

アプリケーションまたはアプレットのJNLP定義を作成するには、次の手順を実行します。

1. 「アプリケーション」ウィンドウで、JNLP定義を生成するADF Swingユーザー・インタフェース・プロジェクトを右クリックし、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」を開き、「ADF Swing」を選択し、「ADF Swing用Java Web Start (JNLP)ファイル」を選択して「OK」をクリックします。

3. 「Java Web Startファイルの作成」ダイアログで、JNLPファイルのプロパティを指定し、「OK」をクリックします。

注意:

ビジネス・サービスとしてEJBを使用してADF Swingアプリケーションを実行する予定である場合は、JNLP定義内のweblogic.jarの参照を、かわりにwlclient.jarに置き換えます。ファイル内のJNLP定義を、次のように編集し、この置換を行います。ADF Swingアプリケーションを、ダウンロードしたweblogic.jarファイルとともに実行しようとしている場合は、oracle.jbo.JboException: JBO-29000: STRINGMANAGER: Message file: 'oracle.jbo.CSMessageBundle'が見つかりません。の例外が表示されることがあります。

ADF Swingユーザー・インタフェース・プロジェクトには、次のものが含まれるようになります。

- webstart.jsp: クライアントおよびADFビジネス・コンポーネント・アーカイブ・ファイル、およびADF Swingがアプレットであるかアプリケーションであるかを記述するJNLPファイルを動的に生成します。

- webstartmt.jsp: 最初の.jspファイルへの拡張。特定のデプロイメント・シナリオに必要なADFビジネス・コンポーネント・ランタイム・ライブラリを記述するJNLPファイルを動的に生成します。

- ctbuild.xmlファイル: クライアント・サイド用の署名済アーカイブ・ファイルおよびADFビジネス・コンポーネント中間層クラスの作成に役立つAntベースのMakefile。

- client_war.deployファイル: WARファイル・デプロイメント・プロファイルの生成に使用します。

- web.xmlファイル: プロジェクト・ファイルのデプロイメント・ディスクリプタを定義します。

- webstart.html file: Java Web Startを使用してアプリケーションを起動するために使用します。

Oracle WebLogic Serverにアプリケーションをデプロイする際に、セキュリティを追加するためにJARファイルの認証を必要とする場合は、コマンド・プロンプト・ウィンドウを開いて、次のように証明書を作成します。

keytool -export -alias yourkeyname -file mykey.cert

ここで、yourkeynameは、JARの署名に使用する鍵の名前です。

鍵および証明書管理ツールの詳細は、http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.htmlを参照してください。

これで、ADF Swingアプリケーションを実行する前に、Webアーカイブを作成する準備ができました。詳細は、Oracle JDeveloperでのアプリケーションの開発のJava Web StartのADF Swing Webアーカイブの作成方法に関する項を参照してください。

11.5 JNLP定義の作成時の処理内容

Java Web Startを介したWebサーバーからのファイルのダウンロードをサポートするために、「Java Web Startファイルの作成」ダイアログで次のものが生成されます。

- ctbuild.xml Antビルド・ファイル: このビルド・ファイルを使用して、これらのアプリケーション・リソースを生成します。

- client.jar: ADF Swingアプリケーション・ソース・ファイルが含まれています。

- mymt.jar: ADFビジネス・コンポーネント・ソース・ファイルが含まれています。

- client_war.deployプロファイル: JDeveloper myworkフォルダのpublic_htmlディレクトリのコンテンツをデプロイするために使用します。したがって、client.jar、mymt.jar、および静的JNLPファイルまたはJSPファイルが含まれています。

さらに、.jspファイルを介して、JNLP定義が動的に生成されます。

- webstart.jsp: クライアントおよびADFビジネス・コンポーネント・アーカイブ・ファイル、およびADF Swingがアプレットであるかアプリケーションであるかを記述するJNLPファイルを動的に生成できます。

- webstartmt.jsp: 最初の.jspファイルへの拡張。特定のデプロイメント・シナリオに必要なADFビジネス・コンポーネント・ランタイム・ライブラリを記述するJNLPファイルを動的に生成します。

11.6 JDeveloperでJava Web StartとともにADF Swingアプリケーションを実行する方法

ADF Swingアプリケーションまたはアプレットを本番Webサーバーにデプロイする前に、JDeveloperの統合WebLogic Serverを使用して、Java Web Startソフトウェアを使用し、ユーザーのアプリケーション実行をシミュレーションできます。

注意:

Java Web Startを使用して実行している間は、JDeveloper内でADF Swingアプリケーションをデバッグできません。

自身のアプリケーション・ライブラリおよびJARファイルを使用して統合WebLogic Serverを設定するには、デプロイメント・プロファイルを作成する必要があります。Java Web Startは、ダウンロードするファイルとアプリケーションの起動方法を識別するために生成したJNLPファイルに依存します。詳細は、第11.4項「Java Web Start JNLP定義を作成する方法」を参照してください。

作業を始める前に、次のようにします。

1. 選択したビジネス・コンポーネント・デプロイメント・シナリオ用のランタイム構成情報を設定します。
詳細は、第11.3項「ランタイム構成情報を設定する方法」を参照してください。

注意:

ローカルモード・デプロイメントを使用してビジネス・コンポーネントのテストのみ行う場合は、デフォルトのlocalランタイム構成を選択します。このオプションでは、同じVMを使用してADFビジネス・コンポーネントとADF Swingライブラリを実行します。

2. ADF Swing Java Web Startウィザードによって生成されたctbuild.xml Ant Makefileを使用してアプリケーション・コンポーネントをアーカイブします。
詳細は、Oracle JDeveloperでのアプリケーションの開発のJava Web StartのADF Swing Webアーカイブの作成方法に関する項を参照してください。

注意:

ビルド・ファイルによって、プロジェクトのpublic_htmlディレクトリに、client.jarおよびmymt.jarという2つの署名付きアーカイブ・ファイルが生成されます。

Java Web Startを使用してADF Swingアプリケーションを実行する手順は次のとおりです。

1. マシンにJava Web Startソフトウェアをインストールします。

2. ユーザー・インタフェース・プロジェクトで、local.htmlファイルを右クリックし、local.htmlの実行を選択して、このページでWebブラウザを起動します。

3. ADF Swingプロジェクトの起動リンクをクリックし、Java Web Startソフトウェアを使用してアプリケーションを実行します。

4. Java Web Startによるダウンロードが完了し、アプリケーションが起動された後、ブラウザを閉じます。Java Web Startを使用して、アプリケーションとセキュアなアプレットの両方を実行できます。
次にアプリケーションを実行すると、Java Web Startによって前のダウンロード以降に変更されたソース・ファイルまたはライブラリのみダウンロードされます。

注意:

ADF Swingアプリケーションの実行を試み、weblogic.jarを使用してOracle WebLogic ServerデプロイメントのJNLP定義を作成した場合、oracle.jbo.JboException: JBO-29000: STRINGMANAGER: Message file: 'oracle.jbo.CSMessageBundle' not found. exceptionと表示されることがあります。この例外は、ビジネス・サービスとしてEJBを使用してOracle WebLogic Server上でJava Web Startを実行する場合に発生します。JNLP定義内のweblogic.jarの参照を、かわりにwlclient.jarに置き換える必要があります。JNLP定義を編集して、この置換を行えます。

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。