>> Visual Web Pack のほかのドキュメント
リストボックスコンポーネント
執筆: Visual Web Pack チュートリアルチーム
| 2007 年 5 月 [Revision number: V5.5.1-1] |
|
|
このチュートリアルでは、NetBeans Visual Web Pack 5.5 を使用して、複数選択をサポートする「リストボックス」コンポーネントを使用したアプリケーションを作成します。リストボックスから 1 つまたは複数の項目を選択し、「送信」ボタンをクリックすると、選択した項目がテキスト領域に表示されます。これらの概念は、「リストボックス」コンポーネントのほかに、「ドロップダウンリスト」、「チェックボックスグループ」、および「ラジオボタングループ」コンポーネントにも適用されます。 |
|
目次
|
|
 |
このチュートリアルでは、次のテクノロジとリソースを使用します。
JavaServer Faces コンポーネント / Java EE プラットフォーム |
Java EE 5* の場合、1.2 J2EE 1.4 の場合、1.1
|
| Travel データベース |
任意 |
| BluePrints AJAX コンポーネントライブラリ |
任意 |
* このチュートリアルの公開時点で Java EE 5 をサポートしていたのは Sun Java System Application Server だけです。
このチュートリアルは、Sun Java System Application Server PE 9.0 Update Release 1 と Tomcat 5.5.17 を使用することを想定しています。別のサーバーを使用している場合は、「リリースノート」と「FAQ」(または「日本語 FAQ」) で既知の問題やその回避策を確認してください。サポートされているサーバーと Java EE プラットフォームについては、「リリースノート」を参照してください。
ページの作成
-
新しいビジュアル Web アプリケーションプロジェクトを「ListExample」という名前で作成します。
次の図に、このあとの手順で作成するページのプレビューを示します。
図 1:サンプルページのデザイン |
-
「パレット」ウィンドウの「コンポーネント」タブにある「基本」セクションから「リストボックス」コンポーネントをドラッグし、ページにドロップします。次に、コンポーネントの右端をクリックしてドラッグし、幅を広げます。
「アウトライン」ウィンドウに、「リストボックス」コンポーネントに関連付けられているコンポーネントが表示されます。リスト内のすべての項目は、「リストボックス」コンポーネント自体 (listbox1) によって追跡されます。リストボックスは listbox1DefaultOptions という不可視コンポーネントに関連付けられています。このコンポーネントには、リストボックスに表示される項目のリストが含まれます。また、このコンポーネントによって、リストボックスで選択された項目が追跡されます。
-
「プロパティー」ウィンドウで、「リストボックス」コンポーネントの「multiple」プロパティーのチェックボックスを選択することにより、そのプロパティーを True に設定します。
「multiple」プロパティーは、「プロパティー」ウィンドウの「データ」セクションの下にあります。True に設定すると、ユーザーはリストボックスで複数の項目を選択できるようになります。
- 「パレット」から「ボタン」コンポーネントをドラッグし、リストボックスの右側のページ上にドロップします。ボタンのテキストを「送信
」に変更します。
「テキスト領域」コンポーネントをページ上にドラッグし、リストボックスの下にドロップします。次に、コンポーネントの幅をリストボックスと同じ幅にします。
このテキスト領域には、リストボックス内で選択された項目を表示します。
リストボックスのプロパティーの定義と維持
このアプリケーションでは、ユーザーのセッション全体にわたって、リストボックス情報を保存する必要があります。ユーザーセッションデータを保存するには、セッションスコープ内にある、管理 Bean の SessionBean1 のプロパティーにデータを保存します。ここでは、リストボックスデータを格納するために 2 つのプロパティーを SessionBean1 に追加します。
-
「アウトライン」ウィンドウで「SessionBean1」を右クリックして、ポップアップメニューから「追加」>「プロパティー」を選択します。
注: 「追加」メニューが表示されない場合は、ポップアップメニューをいったん閉じてから再び開きます。
「新規プロパティーパターン」ダイアログが表示されます。図 2 はその入力後の状態を示しています。このダイアログを使用して、セッション Bean のプロパティーを作成します。
図 2:「新規プロパティーパターン」ダイアログ |
- 「名前」フィールドに「
listOptions」と入力します。
-
「型」フィールドに「Option[]」と入力します。
注: Option クラスのインポート文は、次の節で追加します。
「了解」をクリックしてプロパティーを作成します。
listOptions 配列には、Option 型のオブジェクトが含まれます。各オブジェクトはリスト内のオプションを 1 つ表します。各オプションには、表示名と値があります。表示名は常に String 型です。値は任意の型のオブジェクトにできますが、この例では String 型です。
現在選択されている項目の値を保持するために、SessionBean1 プロパティーを String[] 型の「choices」という名前で作成します。
- 「アウトライン」ウィンドウで SessionBean1 を右クリックして、「追加」>「プロパティー」を選択します。
- 「新規プロパティーパターン」ダイアログで、「名前」に「
choices」、「型」に「String[]」と入力し、「了解」をクリックします。
注: 次の節で SessionBean1 に Options クラスのインポート文を追加するまで、「SessionBean1」ノードの下に新しいプロパティーは表示されません。
リストボックスのプロパティーの初期化
この節では、前の節で作成した 2 つのセッション Bean のプロパティーの値を初期化します。また、「listOptions」プロパティーに、リストボックスの初期項目を設定します。
- 「アウトライン」ウィンドウで、「SessionBean1」をダブルクリックして、Java エディタでソースコードを開きます。
-
Java ソースファイル内で、右クリックして「インポートを修正」を選択し、「インポートを修正」ダイアログを表示します。
このダイアログを使用して、リストボックス内の単一の項目を表す Option クラスのインポート文を追加します。
「インポートを修正」ダイアログで、「完全修飾名」の下のドロップダウンリストをクリックし、リストから正しい Option クラスを選択します。
- アプリケーションが Java EE 5 に基づいている場合は、「
com.sun.webui.jsf.model.Option」を選択します。
- アプリケーションが J2EE 1.4 に基づいている場合は、「
com.sun.rave.web.ui.model.Option」を選択します。
-
SessionBean1 コンストラクタに次の太字のコードを追加します。
| コード例 1:Java EE 5 アプリケーションのオプションのプロパティー |
public SessionBean1() {
// プロパティーの値を初期化し、
// 「listOptions」プロパティーに選択項目の初期値を追加
listOptions = new Option[] {
new Option("項目 1", "選択項目 1"),
new Option("項目 2", "選択項目 2"),
new Option("項目 3", "選択項目 3")};
choices = new String[] {};
}
|
上記のコード例の太字で示した部分の 3 行目では、「listOptions」プロパティーを初期化しています。それに続く 3 行では、リストボックスに項目を追加しています。最初のパラメータ (ここでは「項目 1」) は、項目の値です。この値は、項目を選択したときにリストボックスコンポーネントの「value」プロパティーに格納されます。この例では String 型を使用していますが、Java の任意のクラスのインスタンスを使用できます。2 番目のパラメータ (ここでは「選択項目 1」) は、リストボックスに表示するテキストです。コードの最終行では、デフォルトで何も選択されないように、「choices」プロパティーを初期化しています。
- 「Page1」タブをクリックしてビジュアルデザイナーでそのページを表示します。
- 「アウトライン」ウィンドウで「SessionBean1」ノードを展開し、「
listOptions」プロパティーと「choices」プロパティーのノードが存在することを確認します。
リストボックスへのプロパティーのバインド
この節では、listbox1 コンポーネントの「items」プロパティーと「selected」プロパティーを SessionBean1 の「listOptions」プロパティーと「choices」プロパティーにバインドします。これらのプロパティーをバインドすると、コンポーネントのプロパティーの値が Bean のプロパティーの値にリンクされます。
-
ビジュアルデザイナーの Page1 で、「リストボックス」コンポーネントを右クリックし、「データにバインド」を選択します。
「データにバインド」ダイアログが表示されます。
図 3 に示すように、「オブジェクトにバインド」タブで「SessionBean1」>「listOptions」を選択します。
図 3:オブジェクトにバインド |
「了解」をクリックします。
これで、リストボックスの「items」プロパティーが SessionBean1 の listOptions 配列にバインドされました。
リストボックスの「プロパティー」ウィンドウで、「selected」プロパティーの省略符号ボタン (...) をクリックします。このプロパティーは、「プロパティー」ウィンドウの「データ」セクションの下にあります。
「selected」プロパティーのプロパティーエディタが「listbox1 - selected」というタイトルで表示されます。
-
必要に応じて、「オブジェクトにバインド」タブをクリックし、「SessionBean1」ノードの下の choices を選択して「了解」をクリックします。
これで、リストボックスの「selected」プロパティーが SessionBean1 の choices 配列にバインドされました。
リストボックスで選択された項目の表示
この節では、「送信」ボタンの動作を追加します。このボタンは、
- 現在選択されている項目の一覧を
SessionBean1 から取得します。
- テキスト領域にその一覧を表示します。
- ビジュアルデザイナーの Page1 で、「送信」ボタンをダブルクリックして Java エディタでそのアクションメソッドを開きます。
button1_action() メソッドに次の太字のイベントハンドラのコードを追加します。
注:コードを挿入したら、Ctrl-Shift-F キーを押すと、コードが自動的に再フォーマットされます。
| コード例 2:Button1 のイベントハンドラ |
public String button1_action() {
//現在の選択項目を SessionBean1 から取得
String[] mySelections = getSessionBean1().getChoices();
String showSelections = "";
if (mySelections != null) {
// 選択した項目の値のリストを作成
for (int i = 0; i < mySelections.length; i++)
showSelections = showSelections + mySelections[i] +"\n";
}
if (showSelections.equals(""))
showSelections = "項目が選択されていません";
else
showSelections = "選択された値:\n" + showSelections;
// テキスト領域 (textArea1) にリストを表示
getTextArea1().setValue(showSelections);
return null;
} |
- メインツールバーの緑色の矢印
をクリックするか、「実行」>「主プロジェクトを実行」を選択して、アプリケーションを構築および実行します。
実行中のアプリケーションで、リストボックスから 1 つまたは複数の項目を選択し、「送信」ボタンをクリックします。
複数の項目を選択するには、Ctrl キーを押しながらクリックします。「送信」ボタンをクリックすると、選択した項目の値がテキスト領域に表示されます。図 4 に実行中のアプリケーションを示します。
図 4:ブラウザで実行中のリストボックスアプリケーション |
リストボックスの項目の追加および削除
最後の節では、リストボックスの項目を追加および削除するボタンを追加します。リスト内の各項目には、名前と値があります。新規に追加される項目の値は、リスト内での項目の位置に基づいて設定します。また、項目の値を使用して、リストから削除する項目を判別します。
- 「デザイン」をクリックしてビジュアルデザイナーを開きます。
- 「送信」ボタンの下にボタンを追加します。ボタンのテキストを「追加
」に変更します。
- 「追加」ボタンの下にもう 1 つボタンを追加します。このボタンのテキストを「削除
」に変更します。
「追加」ボタンをダブルクリックして、button2_action メソッドに次の太字のコードを挿入します。
| コード例 3:Button2 のアクションメソッド |
public String button2_action() {
// listbox1 コンポーネントに新しく生成した項目を追加する
getSessionBean1().addOption();
getTextArea1().setText("新しい項目が追加されました");
return null;
} |
注:メソッドをまだセッション Bean に追加していないので、getSessionBean1().addOption() の行でエラーが発生します。このエラー状態により「デザイン」ビューが使用できないため、次の手順では「アウトライン」ウィンドウを使用します。
- 「アウトライン」ウィンドウを開き、「button3:削除」ノードを右クリックし、「イベントハンドラ action を編集」を選択します。
-
button3_action メソッドに次の太字のコードを挿入します。
| コード例 4:Button3 のアクションメソッド |
public String button3_action() {
// 選択された 1 つ以上の項目を削除
getSessionBean1().removeOptions((String[])getListbox1().getSelected());
getTextArea1().setText("選択された項目が削除されました");
return null;
} |
注:メソッドをまだセッション Bean に追加していないので、getSessionBean1().removeOptions の行でエラーが発生します。
- 「アウトライン」ウィンドウで SessionBean1 を右クリックして、「追加」>「プロパティー」を選択します。
- 「新規プロパティーパターン」ダイアログで、「名前」を「
counter」、「型」を「int」に設定し、「了解」をクリックして新しいプロパティーを追加します。
- 「アウトライン」ウィンドウで、「SessionBean1」をダブルクリックして、Java エディタでソースコードを開きます。
SessionBean1 コンストラクタで、choices = new String[] {}; のあとに次の行を挿入してカウンタを初期化します。
counter = 0;
SessionBean1 コンストラクタのあとに次のメソッドを挿入します。
| コード例 5:addOption メソッドと removeOptions メソッド |
public void addOption() {
// 新しい項目をリストに追加するために、
// 新しい項目を含む新しい配列を作成
setCounter(getCounter() + 1); // 一意の値を保証するカウンタ
String newItemVal = "newitem" + getCounter();
Option opt = new Option(newItemVal, "新しい項目 "+getCounter());
Option[] current = getListOptions();
Option[] newOpts = new Option[current.length + 1];
// 現在の項目を新しい配列に追加
for (int i = 0; i < current.length; i++)
newOpts[i] = current[i];
newOpts[current.length] = opt;
setListOptions(newOpts); // リストを更新
setChoices(new String[] {newItemVal}); // 新しい項目を選択
}
public void removeOptions(String[] selectedValues) {
// 値とオプションを照合して、
// リストボックスで選択された項目を削除
Option[] current = getListOptions();
int curLength = current.length;
if (selectedValues != null) {
int numSelected = selectedValues.length;
int newLength = curLength - numSelected;
Option[] newOpts = new Option[newLength]; // 新しいリストの配列
int k = 0; // 新しいリスト用のカウンタ
boolean found = false;
for (int i = 0; i < current.length; i++) {
// 現在の項目をスキャンして削除する項目を識別する
found = false;
for (int j = 0; j < numSelected; j++) {
if (current[i].getValue().equals(selectedValues[j])) {
// 次の項目を削除する
found = true;
break;
}
}
if (!found) {
// 次の項目は選択されなかったため、この項目を新しいリストに追加する
newOpts[k] = current[i];
k++;
}
}
setListOptions(newOpts); // リストを更新
setChoices(null); // 既存の選択されていた値を削除
}
}
|
これで新しいメソッドがセッション Bean に追加されたので、「Page1.jsp」タブをクリックしてそのページを開いたあと、「デザイン」ボタンをクリックしてビジュアルデザイナーに戻ります。
そのページには、まだエラー状態が表示されています。
- ビジュアルデザイナーのツールバーの「再表示」ボタン
をクリックしてエラー状態を解消し、ページにコンポーネントを表示します。
アプリケーションを実行します。
コードをテストするには、図 5 に示すように、「追加」ボタンをクリックしてリストの末尾に新しい項目を追加します。項目を削除するには、1 つまたは複数の項目を選択し、「削除」ボタンをクリックします。
図 5:リストボックスへの項目の追加 |
関連項目:
更新日: 2007 年 5 月 24 日