連載④ゆ se を味わう 表 1 ダイアログのプロバティ コンポーネント プロ / ヾティ 言値 jDialog 600 , 300 S1ze 検索結果 tit le jContentPane1 layout FIowLayout 図 4 ダイアログのプロバティの正 阯日 0 ・日計。′。単 ( トき。進 1 あ物 0 P 引 0 設 0 : 工町。露。職聞 ト J 朝物 : : 円叩・代第 。第 JT 。。 : 1 め、 C 。巌の b k05 第 d Sy ”℃。「 - ⅵ。 00 コ 00 , 当第田第第 。。 rvon “颪 0 “い N 大 d ・歳ー RtÆ - . 0 ) 物物支朝 図 5 空の検索結果ダイアログ 検まー検素条件 物幸 ニは タイトル : : アーティスト : 表示設定一 、を録物 0 最近リリ - スきれた第工、霧上 Music ( 物 t 一 og 《 2 ) ーヨ va Mu 引 [ 朝【ー og.•av - Eciipse P!atform 。 0 第新・ - に せい上 C , 財い いに」 1 ・ P 第滲 検渠第 ~ 05 物第要物れしを 索 ] ボタンがクリックされたらデータベースを検索し、そ の結果をダイアログに表示します。以下では、 [ 検索 ] ボタ ンがクリックされたときに表示されるダイアログを作成し ます。 ダイアログは、 JDialog クラスを用いて下記の手頂で作 成します。 Visual Editor は、モーダルではない ( モード レスの ) ダイアログを作ります。 JDialog クラスはトップ レベル・コンテナなので、 JFrame クラスと同様にコンテ ンツベインをもちます。 1. Visual Editor パレットの Swing Containers で JDi- alog をクリックし、 VE 工デイタの Music CataIog ウ インドウ外側の白い部分にカーソルを移動する。 2. ダイアログを追加できる部分が枠で示されるので、枠の 内側の白い部分をクリックする。 3. 画面上のどこかに表示されている Music CataIog ウイ ンドウの横に空のダイアログが表示され、 Java Beans ビューに jDialog と jContentPane1 が追加される。 4. ダイアログおよびダイアログのコンテンツベインのプロ パティ俵 1 ) を設定する ( 図 4 ) 。 次に、 [ 検索 ] ボタンがクリックされたとき、ダイアロ グが表示されるようにします。それには、 jButton の ac- tionperformed() メソッドを書き換える必要があります。 ・ P 新引 、要新第一量近リ当、 - ュをれた憲朝第上物 ダイアログは getJDialog() メソッドで生成されるので、 jButt 。 11 のイベントハンドラからこのメソッドを呼び出し てみましよう。手川頁は以下のとおりです。 1. Outline ビューで、 getJButton()" をクリックすると、 Java 工デイタに getJButton() メソッドのコードが表 示される。 2. 、 System. out. println( ・ ・・ ) ; " の行をコメントアウト し、 getJDialog() メソッドとダイアログの setVisi- ble() メソッドの呼出し ( 下線部 ) を追加する。 private JButton getJButton( ) { = 皿 11 ) { if (jButton jButton. addActionListener=> (new Java. awt . event . ActionListener() { public void actionPerformed=> (j ava. awt . event . ActionEvent e) { / / system. out . println* ("actionPerformed") ; / / TODO getJDia10g() ; jDia10g. setVisib1e(true) ; 00 return j Button ; 3. ツールバーの Run メニューから Run As → JavaAp- plication を選択する (Save Resource ダイアログが 表示されたら、 MusicCataIog. java にチェックマーク が付いていることを確認して [OK] ボタンをクリック する ) 。 4. Music Catalog ウインドウか表示される。 5. 検索タブの [ 検索 ] ボタンをクリックし、、、検索結果 " ダ イアログ ( 図 5 ) カ俵示されることを確認する。 6. 検索結果ダイアログの、、閉じる " ボタンをクリックし、ダ イアログを閉じる。 155 UNIX MAGAZINE 2005 . 2
図 9 テーカレに表示された列見出し UNIX MAGAZINE 2005 . 2 jDia10g. setVisib1e(fa1se) ; ("actionPerformed") ; / / TODO / / system. out . println=> (java. awt . event. ActionEvent e) { public void actionPerformed=> (new java. awt. event. ActionListener() { jButton2. addActionListener=> if (jButton2 = Ⅱ u11 ) { private JButton getJButton2() { コード ( 下線部 ) を追加する。 をコメントアウトし、ダイアログを非表示にするための る。下記のように、、 system. out. println( ・ 4. Java 工デイタに getJButton2() メソッドが表示され ックし、、、 Events" →、 actionPerformed" を選択する。 3. Java Beans ビューで jButton2-" 閉じる ' ' " を右クリ ロバティの値を、、閉じる " に設疋する。 ユーに jButton2 が追加される。 jButton2 の text プ 2. テープルの下に空のボタンが追加され、 Java Beans ビ tentPaneI をクリックする。 JButton をクリックし、 Java Beans ビューの jC01 ト 1. VisuaI Editor ノヾレットの Swing Components の しましよう。 最後に、検索結果ダイアログに [ 閉じる ] ボタンを追加 ようにすると、それ以降の列の幅は自動的に調整されます。 ーティスト " の列の幅をひろげて見出し全体が表示される QUENT-COLUMNS です。したがって、たとえば、、ア 列のサイズ調整モードは AUTO-RESIZE-SUBSE- 4. 、、閉じる " ボタンをクリックし、検索結果ダイアログを閉 確認します。 リックし、各列に図 9 のような見出しカ俵示されるかを 表示されます。ここで、検索タブの [ 検索 ] ボタンをク plication を選択すると、 Music Catalog ウインドウが ツールバーの Run メニューから Run As → JavaAp- 3. テープルに列見出しカ俵示されるかを確認する。 連載④ Ec ゆ se を味わう 159 ( えんどう・みよこ ) 次回は、データベースとの接続について解説します。 ープルの作成について説明しました。 今回は、ボタンのイベントの処理、ダイアログの表示、テ ☆ 結果ダイアログがふたたひ表示されるかを確認する。 6. 検索タブの [ 検索 ] ボタンをもう 1 回クリックし、検索 します。 タンをクリックし、ダイアログカしく閉じるかを確認 表示される検索結果ダイアログ ( 図 10 ) の [ 閉じる ] ポ させます。検索タブの [ 検索 ] ボタンをクリックすると plication を選択し、 Music Catalog ウインドウを表小 ツールバーの Run メニューから Run As → Java Ap- 5. [ 閉じる ] ボタンカしく機能するかを確認する。 return jButton ; 図 10 じる ] ホタン付きのオ吉果ダイアログ
図 7 ダイアログ上に 1 劬口されたスクロールペインとテーブル [ 、ミ“ 0 R “ー物城・ 0 当印のⅵ 0 物 P 0 ーネントの推奨サイズ (preferredSize) が自動的に引算さ れます。たとえば、ボタンにラベルを設定すると、そのラ ベル全体を表示するのに必要なサイズが ( コンテナのサイ ズを超えない範囲の ) 推奨サイズとして計算されます。た だし、 VisuaI Editor でコンテナにスクロールペインを追 加すると、かならずはみだしてしまうようです。そこで、上 記の手川頁では推奨サイズを明示的に指定し、スクロールペ インの適切なサイズを固定しています。 ■テープルの列見出しの設定 検索結果ダイアログのテープルには、、、 ID" 、、タイトル " 、、アーティスト " ジャンル価格 " 、、リリース冗上 の 7 つの列を表示します。検索結果ダイアログ上のテー プルのデータは、 DefaultTableModel クラスのインスタ ンスが管理します。したがって、テープルにこれらの列を 追加するには、 DefaultTableModeI クラスの addCol- umn() メソッドを呼び出します。 addCoIumn() メソッ ドには、テープルモデルに列 ( 見出し ) を追加するものと、 列 ( 見出し ) に加えてデータも追加するものの 2 種類があ ります。列 ( 見出し ) だけを追加する場合は、もちろん 1 つ目のバージョンを呼び出します。 1. Outline ビューで、 JTabIe クラスのインスタンスを生成 する getJTable() メソッドをクリックすると、 Java 工 デイタに getJTable() メソッドのコードが表示される。 2. getJTable() メソッドの if 文の最後で addColumn メソッドを呼び出し、引数として列の見出しの文字列を private JTabIe getJTab1e ( ) { if (jTabIe = Ⅱ u11 ) { / / 列見出しの追加 tablemodel . addCoIumn("ID") ; tablemodel . addC01umn(" タイトル " ) ; tablemodel . addC01umn(" アーティスト " ) ; tablemodel. addCOIumn(" ジャン丿レ " ) ; tablemodel . addC01umn ( " 価格 " ) ; tablemodel . addC01umn(" リリース " ) ; tablemodel . addC01umn ( " 売上 " ) ; return j Tab1e ; a - Mu 引 ( ( 3 ー謎い 9 ・ v - Ecii 50 円“ tfO " れ、ツ ・′”レ郵。を AS. 疑 ツ第日第量門ト : 、滝 ek 新 を、旧 00 第訂のび、日 当 J ー・顧 A 国・ こ店 op れ地 「 JT 物ト ト“長′似 3 加 42 興 2 ・警、物れ P ・物 ッ第・ P を・ : ト冫誕国 P ・物 0- ー 0 ー 12 わ。 , 0 S 曁 0 第 A をを 0 、マいーい、版を。 C 。磐い 、。 - 強素紹集 、・第第 0 近リ可 - スをれた乂上第 図 8 Choose a Bean ダイアログ ( h005e ョ Bean ~ Select 引ー : Ch005 ・・ J “・第 1 ( ? = 聞 yc ト第船を”第ニ y 市第朝 舅 5 ー @Ab 「 a 改 T Mod 引 怛“ sw い鹵 le 1 儀 MO 魵 op 旧” 面 te 0 t 山 mod 引 : 讎”す - 第一新 MOd 引 す ( 図 8 ) 。 このダイアログの、、 Matching types" 欄で、、、 Default- TableModel" を選択します。 続いて、ダイアログの下のほうにある、、 Bean variable name" フィールドに、、 tablemodel" と入力します。 れで、 DefaultTabIeModeI クラスのインスタンスを保 持するメンバー変数の名前を指定したことになります。 4. [OK] をクリックしてダイアログを閉じ、 Java Beans ビューに、、 tablem 。 de にが追加されたことを確認する。 テープルモデルの登録は、これで完了です。 さきほど、ダイアログにスクロールペインとテープルを 追加したとき、スクロールペインはダイアログからはみだ した状態で追加されました。場合によっては、コンポーネ ントが置かれているコンテナのサイズに合わせて、コンポ 1 0 1 こでは、説明のために見出しの史リをコードに直接書いていますが、本来 なら、データと同じデータベースの別テープルとして情理したほうがよいでし 158 UNIX MAGAZINE 2005 . 2
表 4 スクロールバーの表示モード HORIZONTAL-SCROLLBAR-ALWAYS HORIZONTAL-SCROLLBAR-AS-NEEDED HORIZONTAL-SCROLLBAR-NEVER VERTICAL-SCROLLBAR-ALWAYS VERTICAL-SCROLLBAR-AS-NEEDED VERTICAL-SCROLLBAR-NEVER ・ i ま 連載④ゆ se を味わう 水平スクロールバーをつねに表示 水平スクロールバーを必要に応じて表示 水平スクロールを表示しない ( デフォルト ) 垂直スクロールバーをつねに表示 垂直スクロールバーを必要に応じて表示 垂直スクロールバーを表示しない ( デフォルト ) ・テープルを生成してからデータを設疋 の 2 通りの方法があります。 VisuaI Editor でテープル を生成する場合は最初にデータを指定することはできない ので、後者の方法をとることになります。テープルにデー タを誌定する手川頁は、次のようになります。 したがって、 TableModeI インターフェイスの新しい実装 クラスを定義する必要がなければ、通常は DefaultTable- ModeI クラスを使います。 ■ダイアログへのコンポーネントの追加 検索結果ダイアログ上のテープルには、最終的にはデー タベースのデータを表示します。データベースのサイズに よっては、テープルに膨大な量のデータが表示される可能 性がありますが、テープルにはあらかじめ設定されたサイ ズのデータしか表示できません。そこで、通常はテープル にスクロールバーを付け、テープルをスクロールしながら データを参照できるようにします。 JTable クラスにはス クロールバーはありませんが、スクロール機能をもつコン テナに情報を提供する Scrollable インターフェイスを実 装しているため、 JScrollPane などのスクロール機能を もつコンテナに追加すれば、スクロールバーを表示するこ とができます。テープルにはスクロールバーを付けること が多いので、 Visual Editor はパレットに、 JTabIe on JScrollPane" というコンポーネントを用意し、両者を一 度に配置できるようにしています。 JScrollPane クラスは、スクロール可能なビューを生 成するスクロールペインと呼ばれるコンテナです。オプシ ョンとして、水平および垂直のスクロールバーを表示する ことができます。スクロールバーの表示モードは、 hori- zontalScroIIBarPolicy プロバティで制御します。この プロバティの値は、 JScrollPane クラスが実装する Scroll- PaneConstants インターフェイスの定数として定義され ています俵 4 ) 。 以下では、 VisuaI Editor のデフォルトの表示モードを 使い、必要に応じてスクロールバーが表示されるようにし ます。 ・アープルの生成時にデータを言定 ァープルにデータを設定するには、 UN 工 X MAGAZINE 2005.2 1. テープルモデルのインスタンスを生成する。 2. テープルモデルを JTable クラスのインスタンスに登録 する。 3. テープルモデルにデータを追加すると、テープルに反映 される。 JTabIe クラスには、テープルに表示するデータを指定 157 ックすると、℃ hoose a Bean" ダイアログが表示されま に表示される 2 つのボタンのうち、右端のボタンをクリ jTable の、、 model" プロノヾティをクリックし、 value 欄 3. テープルにテープルモデルを登録する。 225 " に設疋する。 2. jScroIIPane の preferredSize プロバティの値を、、 580 , ( 図 7 ) 。 ン (jScrollPane) とテープル (jTable) が表示される ると、ダイアログからはみだした状態でスクロールペイ Java Beans ビューの jContentPaneI をクリックす に表示されているダイアログのコンテンツベイン上か、 JTabIe 0 Ⅱ JScrollPane" をクリックし、 VE 工デイタ 1. VisuaI Editor パレットで Swing Components の カレに登録する方法をとります。 fauItTabIeModeI クラスのインスタンスを生成し、テー の仕組みか理解できるように、テープルモデルとして De- ルを生成する手間が省けます。ここでは、テープルモデル 的に生成されてテープルに登録されるので、テープルモデ ラクタを呼び出すと、デフォルトのテープルモデルが自動 できるコンストラクタが定義されています。このコンスト
・遠藤美代子 前回は、 GridBagLayout を使ってアプリケーションに データを入力するためのユーザー・インターフェイスを作 成し、 JavaBean を Java アプリケーションにする手順を 紹介しました。今回は、コンポーネントのイベントの処理 とダイアログの表示、テーカレの作成について説明します。 ■イベントとは イベントとは、ボタンのクリックやメニューの選択とい った、、出来事 " のことです。 Java はイベントにもとづいて処理をおこなうプログラ ミング言語なので、当然のことながらイベントの処理は重 要な意味をもっています。コンポーネントで発生するイベ ントは、 java. util. EventObject クラスの継承クラスのイ ンスタンスとして生成されます。 EventObject クラスは、 イベントの種類やイベントの発生源であるコンポーネント の情報などを伝えます。たとえば、ボタン (JButton) が クリックされると、 EventObject クラスを継承する java. awt. event. ActionEvent クラスのインスタンスが生成さ れます ( 図 1 ) 。 Eclipse や Visual Editor は、ボタンやメニューがク リックされたときに実行する機能のコードは生成してくれ ないので、アプリケーション固有の機能はプログラマーが 自分で書かなければなりません。この連載で作成している MusicCatalog アプリケーションの例でいえば、検索タブ の [ 検索 ] ボタンがクリックされたら、検索条件や表示方 法を示し、データベースを検索して、その結果を表示する コードを実行する必要があります。つまり、イベントカ咥 生したら、このコードを呼び出さなければならないわけで す。このように、イベントを処理するために呼び出される UN 工 X MAGAZINE 2005.2 。。 Ec/ipse ④イベントを処理する java. awt. event. ActionEvent java. awt. AWTEvent 」 ava. util. EventObject java.lang. Object 図 1 イベントクラスの コードを、、イベントハンドラ " と呼びます。 と、それらのイベントを表す ActionEvent クラスのイン の処理を説明します。ボタンやメニューがクリックされる まず、検索タブの [ 検索 ] ボタンがクリックされたとき ■ボタンのクリックイベントの処理 します ( 図 2 ) 。 フェイスである java. awt. event. ActionListener で処理 スは、 EventListener インターフェイスのサプ・インター イスです。たとえば、 ActionEvent クラスのインスタン EventListener インターフェイスのサプ・インターフェ トリスナーとしてイベントを処理できるのは、 java. util. がイベントを扱えることになっていますが、実際にイベン す。 Java のイベントモデルでは、すべてのオプジェクト ナーにイベントを受け取らせるという方法でおこなわれま プジェクトにイベントリスナーを登録し、イベントリス うのが、、イベントリスナー " です。イベントの処理は、オ 況をつねに監視していなければなりません。この役割を担 イベントハンドラを呼び出すには、イベントの発生状 153
InstaIlShield 公認カイドブック InstaIIShieId DevStudi0 ~ MS インストーラ開発 ~ ( 株 ) ネットワールド / 永瀬晋作、石坂望、相浦裕子著 インストーラ作成ツールの代名詞 絶賛 発売中 sta 翡 Shi 可 d 雎ーの公式解説書 InstallShieId は、インストーラ作成ツールの代名詞とも言えるツールです。複数のライン アップがありますが、本書はその中の「 InstallShield DevStudio 9 」という製品の解 説書です。 Microsoft が開発した Windows lnstaller をベースにしたインストーラの基 本的な作成方法から高度なカスタマイズ方法、デバッグ方法まで広範に解説していま す。また、基盤になる Windows lnsta Ⅱ er 技術の基礎についても説明しています。 ■第 1 章 lnstallShield とは■ インストーラの役割 lnstallShield 製品群 t 面 io の 4 つのプロジェクトタイプ 旧 sta Sh 回 d 製品の変遷 評価版のインストール ■第 2 章 WindowslnstaIIer とは■ アーキテクチャ メリット ようこそアシスタント プロジェクトアシスタント 依存関係のスキャン リリースウイザード パッケージの検 テスト ■第 4 章プロジェクトの構造■ プロジェクトの設定 コンポーネント 機能 マーシモシュール プロバティ シーケンス システムの検索 自動登録 ・第 5 章バッチとアップグレード■ File Versioning Rule 3 つの G D アップグレードのタイプ アップグレードの作成 バッチ トランスフォーム InstaIlShieId 公認カイドブック ( 株 ) ネットワールド / 永瀬晋作よ石坂望、相ラ谷子著 ~ M インストーラ開発 ~ InstaIIShield DevStudio 0 Ⅳの・雇 SC 翡 ■第 6 章カスタマイズ■ カスタムアクション VBSC ⅱ pt カスタムアクション 標準 D L L カスタムアクション sta Ⅱⅱ pt カスタムアクション ダイアログのカスタマイズ NT サービス COMサーバの登録 ODBC リソースの追加 粮ワァイルの変更 環境変数 アプリケーションバス ファイルの関連付け 子インストールの呼び出し ローカライズ マージモジュール ■第 7 章トラカレシューティング・ デバッグ ログの取得 ディレクトエデイタ 問題の切り分け トラブルが発生したときには Windows ⅲ st 部サービスのバージョン ms xec. exe のコマンドラインノヾラメーター覧 instrnsi. exe 情報の入手 B5 変型版 CD-ROM 1 枚付属 定価 3 , 570 円 ( 薯腿 ) BN4-7561-4425- X 企業内研修・引用によるカスタムメイド・ OEM 供給に関してのお問い合わせ先・法人営業担当 ( 03 ) 6888-5545 〒 102-8584 東京都千代田区九段北 1 -13-5 日本地所第一ビル電話 03-6888-5500 http://www.ascii.co.jp/ 株式会社アスキー りするメールマガジン A - Ma ⅱ . yom のお申し込みはこちらから http://www.ascii-store.com/a-mail/ 利用ください。・通信販売のお問い合わせ先 . アスキーストア電話 ( 03 ) 3499-9300 http://www.ascii-store.com/ ・ ASC の新刊・イベント情報を毎週お送 ・表示価格は消費税込みです。・本製品は書店および書籍を扱っているパソコンショップでお買い求めください。・品切れの際は書店にてご注文いただくか、通信販売をご
) ン ン一 し カ ・カ ラ 0 ン 仕いイイキ 図 図 2 イベントリスナーの緲砥 Java. util. EventListener MusiC Catalog ( 2 》 Java. awt. event. ActionListener 0 石” J 師社面いれ面 0 け (jButton JButton : を JButton() . 」 ButtOn 5 社 XtC 検紊 - ) . 」 Button addACt ー 0 ーを「 ( ・一 a 3-3 ・ t e 、を n Act iO 禳」を tene 「 ( ) Dub ⅱ 0 VOid ac い 0 「を 6 0 「 d ( 」 a 3 日の Syst を第 0 リし pri れ C30 い 0 日「 fO ( d() つ : メ′な 40 ! 0- ・ ー朝 C02 買 「 M “に C 。第 ( 1 ) 卩・ A ” bc 可加”ノタ 5 1 を 405 ルル第 ( 2 4 / 12 / 12 15 -44 ) : 記い 6 f 朝紕イ ( ) スタンスが生成されます。 ActionEvent クラスのインス タンスは、 ActionListener インターフェイスで処理しま す。ボタンに ActionListener を登録しておくと、ボタン のクリックによって ActionEvent クラスのインスタンス が生成されたとき、 ActionListener インターフェイスの actionperformed() メソッドカび出されます。したが Smut ln を 0 って、ボタンがクリックされたときの処理は、この action- このコードは、 JButton クラスの actionPerformed() performed() メソッドに言当します。 メソッドを呼び出し、 jButton に対して ActionListener ボタンのイベントハンドラのテンプレートは、以下のよ インターフェイスの実装クラスを、、匿名インナークラス " うに VisuaI Editor で自動的に生成することができます。 として登録し、コンソールに、、 actionPerformed()" とい うメッセージを出力する actionperformed() メソッドを 1. EcIipse を起動し、 package Explorer ビューで Music- 実装しています。匿名インナークラスとは、名前のない、 Catalog. java の部分をダブルクリックする (Music- ネストした ( 入れ子になった ) クラスです。つまり、クラ Catalog. java ファイルが Visual Editor 工デイタ ( 以 スを定義しながらインスタンスを生成し、その参照を渡す 下、 VE 工デイタ ) で開かなかった場合は、ファイル名の ための仕掛けといえます。メソッド内部で定義するクラス 部分を右クリックし、、、 Open Ⅵ第 h " →、、 VisuaI Edi- は、このように匿名クラスにすることができます。 tor" を選択する ) 。 こで、 [ 検索 ] ボタンをクリックしたときに何がおこな 2. VE 工デイタで検索タブの [ 検索 ] ボタンを右クリックす われるかをみてみましよう。 るか、または Java Beans ビューで jButton-" 検索 '' を右クリックし、、、 Events" →、、 actionPerformed" を 1. ツールバーの Run メニューから、、、 Run As" → Java 選択する。 Application ' を選択する ( 、、 Save Resource" ダイア 3. Java 工デイタに getJButton() メソッドが表示される ログが表示されたら、 MusicCatalog. java にチェック ので、下記のコードが追加されたことを確認する ( 誌面 マークが付いていることを確認して [OK] ボタンをクリ の都合上、で折り返しています。以下同様 ) 。 ックする ) 。 2. Music Catalog ウインドウが表示される。 private JButton getJButton ( ) { = 皿 11 ) { if (jButton 3. 検索タブの [ 検索 ] ボタンをクリックする。 4. Cons01e ビューに、、 actionperformed()" というメッ jButton. addActionListener=> (new Java. awt. event. ActionListener() セージが出力され ( 図 3 ) 、 [ 検索 ] ボタンのイベントハ public void actionPerformed=> ンドラカ鮃び出されたことが分かる。 (java. awt . event. ActionEvent e) { system. out . println=> 5. 、、閉じる " ボタンをクリックし、アプリケーションを終了 ("actionPerformed") ; / / TODO する。 ■ダイアログの作成 MusicCatalog アプリケーションでは、検索タブの [ 検 「 et い n jButtOn 261 : 8 return jButton; 154 UNIX MAGAZINE 2005 . 2