Oracle® Fusion Middleware Oracle Application Development Framework Swingアプリケーションの開発 12c (12.1.2) E48100-01 |
|
![]() 前 |
![]() 次 |
この章では、Javaビジュアル・エディタを使用してADF Swingアプリケーションをカスタマイズする方法について説明します。「データ・コントロール」パネルを使用して、データバインドされたUIコンポーネントをADF Swingの準備済フレームまたはパネルに挿入します。
この章の内容は次のとおりです。
ADF Swingウィザードを使用してADF Swingフォームおよびパネルを生成した後、生成したアプリケーション・ファイルをカスタマイズできます。JDeveloperは、ビジュアル・ツールを使用したアプリケーションのカスタマイズに役立ちます。たとえば、「データ・コントロール」パネルを使用して、すでにデータバインドされているUIコンポーネントをADF Swingの準備済フォームまたはパネルに挿入できます。
「データ・コントロール」パネルは、表3-1に示すように、データ・コレクション全体(行セットを構成するデータ・オブジェクトで構成されている)をバインドするために使用できるUIコンポーネントを提供します。
表3-1 データ・コレクション全体にバインドできるUIコンポーネント
UIコンポーネント | ドラッグ・アンド・ドロップの形式 | ADFバインディング・タイプ |
---|---|---|
|
表 |
表バインディング |
|
コンボ・ボックス |
ナビゲーション・モードでのリスト・バインディング |
|
リスト(ScrollPane内) |
ナビゲーション・モードでのリスト・バインディング |
|
スピナー |
ナビゲーション・モードでのリスト・バインディング |
|
ラジオ・ボタン・グループ |
ナビゲーション・モードでのリスト・バインディング |
|
ナビゲーション・バー |
イテレータ・バインディング |
|
ツリー |
ツリー・バインディング |
|
グラフ |
グラフ・バインディング |
|
スライダ |
スクロール・バインディング |
|
スクロール・バー |
スクロール・バインディング |
「データ・コントロール」パネルは、表3-2に示すように、1つのデータ・オブジェクト属性をバインドするために使用できるUIコンポーネントを提供します。
表3-2 1つのデータ・オブジェクト属性にバインドできるUIコンポーネント
UIコンポーネント | ドラッグ・アンド・ドロップの形式 | ADFバインディング・タイプ |
---|---|---|
|
テキスト・フィールド |
属性バインディング |
|
編集ペイン |
属性バインディング |
|
JULabel |
属性バインディング |
|
ラベル(ADFビジネス・コンポーネントが属性のラベル・コントロール・ヒントを表示するためのもの) |
属性バインディング |
|
パスワード・フィールド |
属性バインディング |
|
テキスト・エリア |
属性バインディング |
|
テキスト・ペイン |
属性バインディング |
|
ボタンLOV |
LOVバインディング |
|
チェック・ボックス |
ブール・バインディング |
|
フォーマット済編集フィールド |
フォーマット済テキスト・バインディング |
|
コンボ・ボックス |
列挙モードでのリスト・バインディング |
|
リスト |
列挙モードでのリスト・バインディング |
|
スピナー |
列挙モードでのリスト・バインディング |
|
ラジオ・ボタン・グループ |
列挙モードでのリスト・バインディング |
|
プログレス・バー |
バインディングされた範囲バインディング |
|
スクロール・バー |
バインディングされた範囲バインディング |
|
スライダ |
バインディングされた範囲バインディング |
「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フォームを作成する手順は次のとおりです。
「ADF Swingの空のフォームの作成」ダイアログを使用して空のフォームを作成します。これにより、パネル・バインディングを共有できるユーザー・インタフェース・プロジェクトにADF Swingフレームが追加されます。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。
ADF Swingデータ・パネルをADF Swingの空のフォームにドロップします。
詳細は、第3.6項「空のADF Swingフォームにデータ・パネルをドロップする方法」を参照してください。
「データ・コントロール」パネルを使用して、データバインドされたコントロールをADF Swingパネルに挿入します。
注意: 「データ・コントロール」パネルは、最初にそれを開いたときは空で表示されることがあります。データ・モデル・プロジェクトをコンパイルし、そのパネルにデータ・オブジェクトを移入します。 |
作業を始める前に、次のようにします。
次のタスクを完了する必要があります。
ビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADF Swingフォームでビジネス・コンポーネントを使用するには、最初にADFビジネス・コンポーネント・アプリケーション・モジュールでプロジェクトを作成する必要があります。
データ・モデル・プロジェクトをコンパイルします。
データ・モデル・プロジェクトで、そのビジネス・サービスとしてADFビジネス・コンポーネントを使用している場合、JDeveloperによってそのビジネス・サービスがADFデータ・コントロールとして登録されます。
Javaビジュアル・エディタで、データバインドされたUIコンポーネントをパネルに挿入する手順は次のとおりです。
ウィザードを使用して空のADF Swingフォームまたはパネルを作成します。
詳細は、第2.1.1項「ADF Swingデザインタイム・ウィザード」を参照してください。
Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。
「アプリケーション」ウィンドウで、「データ・コントロール」ヘッダーの拡張アイコンをクリックします。
「データ・コントロール」パネルで、UIコンポーネントにバインドするデータ・コレクション、属性またはアクションを、開いているドキュメントにドラッグします。
子の追加ポップアップ・リストから、開いているドキュメントに追加するUIコンポーネントを選択します。
編集中のドキュメントに新しいUIコンポーネントが表示されます。
データ・パネルまたはフォームをレイアウトした後、フォーム内でfetchAttributeProperties()
メソッドを定義することで、ADF Swingアプリケーションのパフォーマンスを向上させることができます。これにより、フォームはバッチ・モードで動作し、属性値をフェッチするようになります。
ビジネス・サービス・データ・ソースへの接続に使用するデータ・モデル定義を変更するためにアプリケーション・コードを編集する必要はありません。その定義はすべて、ユーザー・インタフェース・プロジェクトのメタデータとして2つのファイルDataBindings.cpx
およびPageDef.xml
に含まれています。
これは、JDeveloperでアプリケーションをテストするためにローカル構成を使用していた後に、リモート・デプロイメント構成を使用するデータ・モデル定義に変更する場合に必要になることがあります。また、異なるビジネス・サービス・プロジェクトで定義されている完全に異なるデータ・モデルを使用することもできます。さらに、このタスクを完了するためにコードを変更する必要はありません。
ADF Swingメタデータで新しいクライアント・データ・モデル定義を参照する手順は次のとおりです。
ユーザー・インタフェース・プロジェクトでDataBindings.cpx
ファイルに新しいクライアント・データ・モデル定義を追加し、選択した名前(たとえば、remotedatamodel
)を覚えておきます。
詳細は、第2.6項「クライアント・データ・モデルの定義の作成方法」を参照してください。
注意: 異なるプロジェクトのパッケージのADFビジネス・コンポーネント・アプリケーション・モジュールを使用するようにデータ・モデルを変更し、その新しいアプリケーション・モジュールがセッションBean (BMT)として定義されている場合、 |
必要に応じて、XMLエディタでDataBindings.cpx
ファイルを開き、BC4JDataControl
定義の属性を編集できます。
「ウィンドウ」→「構造」を選択し、ファイルの「構造」ウィンドウを表示します。
「構造」ウィンドウで、変更するデータ・コントロール・ノードを選択します。
「ウィンドウ」→「プロパティ」を選択し、データ・コントロール定義を表示してその属性を編集します。
XMLエディタでPageDef.xml
ファイルを開き、「概要」タブをクリックして、古いデータ・コントロールを参照するバインディングを選択します。
「プロパティ」ウィンドウで「共通」セクションを開き、ドロップダウン・リストから目的のコレクションの「データ・ソース」を選択します。その後、ドロップダウン・リストから、選択したデータ・ソースの目的の属性を選択できます。
バインディング定義内の各バインディングに対して繰り返します。
ADF Swingのウィザードを使用して、データバインドされた様々なコントロールが含まれているADF Swingフォームを作成できます。後で、ADF Swingフォームを1つのメイン・ウィンドウから実行する場合、次のものが含まれているADF Swingフレームを作成できます。
ビジネス・サービス・クライアント・データ・モデル接続を作成するためのブートストラップ・コード
ADF Swingフォームを開き、それにパネル・バインディングを渡すアクション・イベント・ハンドラ
ユーザーが、ボタンをクリックするなど、そのUI内のアクションを実行すると、イベントが発行されます。イベントは、何が起こったかを記述するオブジェクトであり、登録済のリスナーにのみ報告されます。JDeveloperによって、このコードがすべて生成されます。次の手順は、ボタンがクリックされたときにADF Swingフォームを開くために指定する必要があるコードを示しています。
ADF Swingフォームを開くアクションを定義する手順は次のとおりです。
フォームのビジネス・サービスへの接続を作成する空のADF Swingフレームを作成します。
詳細は、第2.9項「空のADF Swingフォームの作成方法」を参照してください。
Javaビジュアル・エディタで空のADF Swingフレームを開き、「ADF Swingの空のフォームの作成」ダイアログで生成されたナビゲーション・バーおよびステータス・バーを削除します。
「コンポーネント」ウィンドウから空のフォームのデータ・パネルにJButtonコントロールを追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。
Javaビジュアル・エディタでボタンを選択します。
「プロパティ」ウィンドウで「イベント」セクションを開き、「actionPerformed」フィールドに、ボタンがクリックされるたびに実行する関数の名前を入力し、[Enter]キーを押します。
JDeveloperによって、ソース・エディタ内に関数のスタブが表示されます。
イベント・スタブにコードを追加し、表示する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);
現在のプロジェクトの既存のデータ・パネルを使用してADF Swingフォームを作成することも、特定のコントロールでレイアウトできる新しい空のデータ・パネルを挿入することもできます。
ADF Swingの空のフォームにデータ・パネルを追加する手順は次のとおりです。
Javaビジュアル・エディタで空のフォームを開き、「設計」タブをクリックします。
「ウィンドウ」→「コンポーネント」を選択し、Swingコントロールのリストを表示します。
「コンポーネント」ウィンドウで、ADF Swingリージョンを選択し、プロジェクト内の既存のデータ・パネルを表示します。
再利用するADF Swingパネルを空のパネルにドラッグします。
「コントロールの選択」ダイアログで、フォームでのデータ・パネルの処理方法を選択します。
コントロールをデータ・パネルに追加します。
詳細は、第3.3項「ADF SwingパネルへのUIコンポーネントの挿入方法」を参照してください。
ADF Swingフォームに追加したADF Swingパネルは、ADFバインディング・コンテナからそのデータバインディングを受け取ります。フォーム上でsetBindingContext()
が呼び出されると、そのフォームのバインディング・コンテナが、パネルのバインディング・コンテナとともに作成されます。
JGoodiesフォーム・フレームワークで提供されているフォーム・レイアウトのレイアウト・マネージャを使用してSwingパネルをレイアウトできます。このフォーム・レイアウトは、グリッドベースでコントロールの配置および整列を高度に制御できます。他のレイアウトとは異なり、複数のグリッド・セルにまたがってコンポーネントを配置できます。
ADFデータ・パネルにフォーム・レイアウトを設定する手順は次のとおりです。
Javaビジュアル・エディタでフォームを開き、「設計」タブをクリックします。
「ウィンドウ」→「プロパティ」を選択します。
「プロパティ」ウィンドウの「ビジュアル」セクションを開き、「layout」ドロップダウン・リストからフォーム・レイアウトを選択します。
詳細は、Oracle JDeveloperでのアプリケーションの開発のコンポーネントの追加に関する項を参照してください。
パネル・レイアウトをカスタマイズします。
詳細は、Oracle JDeveloperでのアプリケーションの開発のレイアウト・マネージャでの作業に関する項を参照してください。
「データ・コントロール」パネルを使用して、ビジネス・サービスのメソッドによって定義されるアクションをユーザーが開始できるようにするボタンを挿入できます。ビジネス・サービスがADFビジネス・コンポーネントである場合、多数の標準アクションが事前定義されています(Create、Delete、Next、Previous、Commit、Rollbackなど)。
ビジネス・サービスがJavaBeanクラスである場合、publicメソッドを定義し、BeanをADFデータ・コントロールとして登録する必要があります。作成するメソッドでは、ADF Swingフォーム・ユーザーが値を指定できる引数を定義することができます。
また、「プロパティ」ウィンドウでメソッドのパラメータ値を指定することもできます。
JavaBeanメソッドを「データ・コントロール」パネルに移入する手順は次のとおりです。
Oracle ADFアプリケーションでアクセスするJavaBeanを定義します。
ビジネス・サービスがデータ・モデル・プロジェクトに表示されます。
ADFデータ・コントロールを使用してデータ・モデル・プロジェクトのビジネス・サービスを登録 します。
データ・モデル・プロジェクトで、そのビジネス・サービスとしてADFビジネス・コンポーネントを使用している場合、JDeveloperによってそのデータ・コントロールが登録されます。
ADF Swingフォームを作成できる場合、メソッド・バインディングをボタンとして表示するか、「メソッド」パネルとして表示するかを選択できます。「メソッド」パネルには、各パラメータのコンポーネントおよび各メソッドの結果を表示するコンポーネントが表示されます。
メソッド・バインディングが含まれるADF Swingフォームを作成する手順は次のとおりです。
データ・パネルをJavaビジュアル・エディタで開きます。
「データ・コントロール」パネルで、目的のカスタム・メソッドを表示するデータ・コレクションまたはデータ・コントロールの「Operations」フォルダを開きます。
「データ・コントロール」パネルの階層は、データ・コレクションの下の「Operations」フォルダ内の特定データ・コレクションに適用される操作(「Create」や「Delete」など)を表します。ビジネス・サービスをADFデータ・コントロールによってサポートする場合は、「Commit」や「Rollback」などの操作も選択できます。これらは階層の最上位ブランチの「Operations」フォルダ内にある現行ドキュメントのバインディング・コンテキストで、すべてのデータ・コレクションに適用されます。
目的の操作を、開いたドキュメントまでドラッグします。
パラメータも結果もないメソッドは、アクションを開始するJButton
コンポーネントとして自動的に追加されます。メソッドにパラメータまたは戻り値がある場合、JDeveloperによって、メソッドを追加する方法を選択できるポップアップが表示されます。フォームでアプリケーション内のメソッド・バインディングをどのように表示するのかに基づいて、これらのオプションの1つを選択します。
アクションを開始するボタンを追加する場合は、「ボタン」を選択します。メソッドへのパラメータの受渡しは、自身で行います。
必要に応じて、各パラメータのコンポーネントおよびメソッドの結果を表示するコンポーネントを表示する「メソッド」パネルを追加する場合は、「メソッド」を選択します。表示されるパラメータおよび結果のコントロールの選択ダイアログで、パネルに表示されるコンポーネントを選択します。
JDeveloperによって、クラス・ファイルに、JButton
またはJPanel
を操作にバインドするコードが追加されます。
メソッドをボタンとしてドロップし、パラメータ値を自身で指定する場合は、テキスト・フィールドをフォームに追加し、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); }
この手順を繰り返し、メソッド・パラメータを指定するテキスト・フィールドごとにイベント・ハンドラを作成します。
「データ・コントロール」パネルから、戻り値を持つカスタム・メソッドをドロップすると、JDeveloperによって、コンポーネントをメソッド結果にバインドするように要求されます。JTable
のコレクションである結果を表示することを選択すると、実行時に、Swing JTable
コンポーネントによってレンダラの準備が試行されたときに、アプリケーションがNullPointerException
で失敗することがあります。この例外は、Integer型に対してレンダラを設定できないSwing JTable
の制限が原因です(Swingでは、Number、Double、Float、DateおよびBooleanがサポートされています)。JTable
をサブクラス化し、Swingでネイティブにサポートされていない型に対するデフォルト・レンダラを設定する必要があります。
たとえば、Integer用のカスタム・レンダラをインストールするには、例3-2に示すコードを使用できます。