Swingクライアントの作成この課題の目標は、すでに作成、デプロイしたWebサービスのクライアントを作成し、そのクライアントにGUIインタフェースを追加することです。このインタフェースには、Webサービスがバイナリ・データとして渡すイメージが表示されます。クライアントの完全版サンプルは、NetBeansサンプル・カタログからダウンロードできます。花の表示メイン・クラスのコーディングクライアント・アプリケーションの作成この項では、Webアプリケーションを作成します。このアプリケーション内で、前のチュートリアルで作成および変更したWebサービスを使用するクライアントを作成します。クライアント・アプリケーションを作成するには:「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。新規プロジェクト・ウィザードが表示されます。「Java」カテゴリから「Javaアプリケーション」を選択します。「次」をクリックします。新規Javaアプリケーション・ウィザードが表示されます。「プロジェクト名」に「FlowerClient」と入力します。プロジェクトの場所を選択し、「終了」をクリックします。IDEにより新しいJavaアプリケーション・プロジェクトが作成されます。「FlowerClient」プロジェクト・ノードを右クリックし、コンテキスト・メニューから「新規」>「Webサービス・クライアント」を選択します。新規Webサービス・クライアント・ウィザードが開きます。URL」ラジオ・ボタンを選択し、WSDLファイルのURLをそのフィールドに貼り付けます。デフォルトでは、URLはhttp://localhost:8080/FlowerAlbumService/FlowerServiceService?wsdlです。ブラウザでURLを見つけるには、Webサービスをテストし、URLの末尾を?Testerから?wsdlに置き換えます。空のパッケージ名を含め、他のデフォルト値をすべて受け入れます。「終了」をクリックします。IDEによりWSDLファイルがダウンロードされ、Webサービスと対話するためのクライアント・スタブが追加され、Javaアプリケーション・プロジェクトの「プロジェクト」ウィンドウにノードが追加されます。JFrameフォームのデザインこの項では、JFrameをWebアプリケーションに追加し、Swingコンポーネントを使用してJFrame内にGUIインタフェースをデザインします。最後に、SwingコンポーネントをWebサービス・クライアント・コードにバインドします。Javaファイルをここからダウンロードできます。「FlowerClient」ノードを右クリックし、「新規」>「JFrameフォーム」を選択します。フレームに「FlowerFrame」という名前を付けます。このフレームをflowerclientパッケージに配置します。FlowerFrameがエディタに表示されます。パレットが開かれていない場合は、パレットを開きます。フレームの下部の境界線をおよそ3分の1まで拡げます。パレットの「Swingコンテナ」セクションからJPanelをFlowerFrameにドラッグします。FlowerFrame全体を埋めるように拡げます。「デザイン」ビューでこのパネルを右クリックします。コンテキスト・メニューから「変数名を変更...」を選択します。パネルに「gardenFlowersPanel」という名前を付けます。パレットからJLabelをgardenFlowersPanelの上にドラッグします。ラベルを右クリックし、ラベルの変数名をtitleLabelに変更します。「titleLabel」を再度右クリックし、「テキストを編集」を選択します。Flowers」に変更します。必要に応じて、titleLabelのプロパティを表示して、目立つフォントに変更します。「ボタン・グループ」を「デザイン」ビューにドラッグします。ボタン・グループの変数名はデフォルトのbuttonGroup1のままにします。4つの「ラジオ・ボタン」を、titleLabelの真下に横一列に並ぶようにドラッグします。各ボタンのプロパティで、buttonGroup1のメンバーとして設定します。これらのボタンの他のプロパティは、次のとおりです。選択状態テキストasterRadioButtontrueAsterhoneysuckleRadioButtonfalseHoneysuckleroseRadioButtonfalseRosesunflowerRadioButtonfalseSunflower「スクロール・ペイン」をラジオ・ボタンの下にドラッグします。横のスペースのすべて、および縦のスペースのおよそ3分の2を埋めるようにスクロール・ペインを拡げます。スクロール・ペインの変数名をmainScrollPaneに変更します。「パネル」をmainScrollPaneにドラッグします。パネルの変数名をmainPanelに変更します。「デザイン」ビューでmainPanelを右クリックし、「レイアウトを設定」>「境界線レイアウト」を選択します。「ボタン」をmainPanelにドラッグします。mainPanelに境界線レイアウトが設定されているため、ボタンはパネル全体を埋めるように自動的に拡げられます。picture...」に変更します。1つの「スクロール・ペイン」をmainScrollPaneの下のスペースにドラッグします。残りの全スペースを埋めるように、このスクロール・ペインを拡げます。新しいスクロール・ペインの変数名をthumbnailScrollPaneに変更します。「パネル」をthumbnailScrollPaneにドラッグします。このパネルの変数名をthumbnailPanelに変更します。thumbnailPanelのレイアウトを「グリッド・レイアウト」に設定します。4つの「ボタン」をthumbnailPanelにドラッグします。thumbnailPanelにグリッド・レイアウトが設定されているため、すべてのボタンが自動的に同じサイズになり、パネル全体を埋めるように拡げられます。これらのボタンのプロパティは、次のとおりです。thumbnailPanelのボタン変数名テキストasterButton待機中...honeysuckleButton待機中...roseButton待機中sunflowerButton待機中...これでJFrameフォームのデザインは完成です。この段階で、FlowerFrameは次のように表示されます。JFrameコンポーネントのバインディングこの項では、コンストラクタでコンポーネントを初期化し、そのコンポーネントをリスナーにバインドします。リスナーは、花のイメージを表示するコードをコールします。コンポーネントの初期化この項では、FlowerFrameコンストラクタを記述します。エディタの「ソース」ビューに変更します。FlowerFrameクラス本文の先頭とFlowerFrameコンストラクタを探します。コンストラクタの前にあるFlowerFrameのクラス本文の先頭に、すべての花の名前の文字列配列を作成します。"sunflower"};FLOWERS文字列配列とコンストラクタの間に、flowersという名前のjava.util.Mapを初期化する行を追加します。このマップはStringを取ってImageにマップします。java.util.Mapとjava.awt.Imageのインポート文を追加します。flowersマップの特定のインスタンスで特定のImageを特定のStringに関連付けるコードを、FlowerFrameコンストラクタに追加します。ラジオ・ボタン用のItemListenerと4つの花のボタン用のActionListenerを初期化し、デフォルトのタイトルを設定します。sunflowerButton.addActionListener(bListener);}java.awt.event.ItemListenerとjava.awt.event.ActionListenerのインポート文を追加します。これでコンストラクタは完成しました。コードにRBListenerクラスとButtonListenerクラスが含まれていないため、コンパイル・エラーの警告が表示されます。この2つのクラスは、それぞれItemListenerとActionListenerのカスタム実装です。この2つのクラスの記述は、次の項で行います。花の表示この項では、ラジオ・ボタンと花のボタンのカスタム・リスナーを記述します。ボタンによって選択された花を判断し、その花のImageをflowersマップから取得するメソッドを記述します。最後に、Mainクラスによってコールされ、各サムネイルのImageを取得するメソッドを記述します。args[])メソッドを探します。このメソッドとそのドキュメントを削除します。このアプリケーションでは、かわりにMainクラスを使用します。mainメソッドのかわりに、カスタムItemListenerをラジオ・ボタン用に記述します。このリスナーは、ラジオ・ボタンが選択されたときに新しい花のイメージを表示します。}}java.awt.event.ItemEventのインポート文を追加します。カスタムItemListenerの下に、カスタムActionListenerを4つの花のボタン用に記述します。ボタンがクリックされると、リスナーは関連するラジオ・ボタンを選択します。}}java.awt.event.ActionEventのインポート文を追加します。カスタムActionListenerの下にshowFlowerメソッドを記述します。このメソッドは、選択されているラジオ・ボタンを判断し、対応する花のImageをflowersマップから取得します。mainPictureButton.setText("");}javax.swing.ImageIconのインポート文を追加します。setThumbnailsメソッドを記述します。このメソッドは、各サムネイルのイメージをflowersマップから取得します。Mainクラスがこのメソッドをコールします。}}FlowerFrameのコードに貼り付けたときにインポートを修正していない場合は、インポートを修正します。エディタで右クリックし、コンテキスト・メニューから「インポートを修正」を選択すると、すべてのインポートを一度に修正できます。完成した一連のインポート文は次のようになります。これでFlowerFrameは完成しました。メイン・クラスのコーディングこの項では、Mainクラスを完成させ、FlowerFrameの表示、Webサービスへの接続、およびWebサービスの操作のコールを実行できるようにします。Main.javaクラスをエディタで開きます。クラス本文のmainメソッドの前で、ダウンロードした写真の数を示すint変数を初期化します。downloadedPictures;mainメソッドの本文で、4つの花用のHashMapと、4つのサムネイル用に別のHashMapを作成します。HashMap&lt;String,Image&gt;(4);java.awt.Image、java.util.Mapおよびjava.util.HashMapのインポート文を追加します。mainメソッドの本文で、FlowerFrameを表示するコードを追加します。mainメソッドの本文で、クライアントをサービスに接続するコードを追加します。org.flower.service.FlowerServiceとorg.flower.service.FlowerServiceServiceのインポート文を追加します。mainメソッドの本文で、4つのRunnableスレッドの配列を作成し、WebサービスのgetFlower操作をスレッドごとに一度コールするコードを追加します。Thread(tasks[i]).start();}org.flower.service.IOException_Exceptionのインポート文を追加します。themainメソッドの本文で、WebサービスのgetThumbnails操作を別スレッドでコールするコードを追加します。Thread(thumbsTask).start();Main.javaのコードに貼り付けたときにインポートを修正していない場合は、インポートを修正します。エディタで右クリックし、コンテキスト・メニューから「インポートを修正」を選択すると、すべてのインポートを一度に修正できます。インポートするListクラスの選択肢が表示されたら、「java.util.List」を選択します。完成した一連のインポート文は次のようになります。java.util.Map;これでMainクラスは完成しました。}}これでクライアント・アプリケーションは完了です。EJBモジュールに委譲してそのイメージを公開するWebサービスと対話するコードを作成しました。クライアントを右クリックし、「実行」を選択します。Swingアプリケーションが起動し、しばらくするとWebサービスから受信されるイメージが表示されます。表示されないイメージがある場合は、FlowerServiceプロジェクトを消去およびビルドしてから、再度実行します。メイン・フレームに表示されるイメージは、ラジオ・ボタンを選択するか、サムネイルをクリックすることによって変更できることに注意してください。EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。