図 20 完成し層タブ こを」検索条件 ーアーティスト : ジャンル : すべて 。表示設定 ~ ・を録 0 最近リリスされた第売上瀬 分は自分でコーディングしなければなりません。 Button- Group クラスのインスタンスは、 MusicCatalog クラス のすべての場所から参照できるように、メンバー変数で保 持します。、、 Outline" ビューの MusicCataIog ツリーの う朝頁には、 MusicCatalog クラスに亘暠されたメンバー変 数が表示されています。最後のメンバー変数である jRa- dioButton2 をクリックすると、 Java 工デイタに jRa- まず、検索を開始するためのボタンを追加しましよう。 dioButton2 変数の亘言が表示されます。この亘暠の直後 検索条件パネルの右横に新しいパネル (jPane13) を追加 に、次のコードを入力してすこし待ちます。 し、 preferredSize プロバティを、、 110 , 97 " 、 layout プロ private javax. swing. パティを、、 BorderLayout" に変更します。 次に、 VisuaI Editor パレットの、、 Swing Compo- すると、コードアシスト機能によって javax. swing nents" から、、 JButton を選んで jPane13 の上をポイン パッケージのクラス一覧が表示されます。一覧が表示さ トし ( クリックしてはいけません ) 、、、 North " というラベ れたら、、 B " と入力し、、、 B " で始まるクラスの一覧から ルの部分をクリックすると、 jPane13 の上部にラベルのな 、 ButtonGroup" を選択して Enter キーを押します。 いボタンカ己置されます。 Java Beans ビューの jButton れで javax. swing" の部分が消え、 private Button- を右クリックして、、 Set Text " を選択し、ボタンのラベル Group" というコードが入力されます。 javax. swing の部 として、、検索 " と入力します。 分は、、 import javax. swing. ButtonGroup; ' というイ 最後に、ステータス・メッセージを表示するラベルを追 ンポート文に変換され、 MusicCatalog. java ファイルの 先に追加されて 0 、ます。引き続き、メ , 、一変数の宣言 加します。 Visual Editor パレットの、、 Swing Compo- nents" から、、 JLabel" を選んで、 Java Beans ビューの を完成させます。 jPaneI をクリックします。 Java Beans ビューの jLa- private ButtonGroup bgroup = Ⅱ u11 ; be13 か選択されている月た態で、 preferredSize プロバティ 次に、 Outline ビューで getJPane12() を選択し、 Java を、、 515 , 30 " に設疋し、 text プロバティを空にします。 工デイタに getJPane12() メソッドを表示させます。そし れで検索タブは完成です ( 図 20 ) 。 て、 getJPane12() メソッドの if 文の末尾に次のコードを 追加します。 private JPaneI getJPane12() { if (jPane12 ーⅡ u11 ) { / / ラジオボタンのグループ化 bgroup = new ButtonGroup ( ) ; bgroup ・ add (j Radi0Button) ; bgroup ・ add (j Radi0Button1) ; bgroup. add (j Radi0Button2) ; Music ( at 謝 09 く 2 》 : ☆ 今回は、アプリケーション・ウインドウの作成、レイア ウト・マネージャーの言又ノ、コンテナへのコンポーネント の追加、コンポーネントのプロバティの設定などについて 説明しました。 次回は、 JavaBean を Java アプリケーションにする方 法と、 GridBagLayout マネージャーの使い方について説 明します。 ( えんどう・みよこ ) こで、 MusicCataIog クラスを実行し、ラジオボタン が相互排他になっているかを確認しておきましよう。 その他のコンポーネント 検索タブで残っているのは、検索時のステータス・メッ セージを表示するラベルと、検索を開始するためのボタン です。 168 UNIX MAGAZINE 2004. 12
図 10 の左上にあるべインが、アプリケーションの実行 時の外観をデザインまたは確認する VisuaI Editor 工デ イタ、その下にあるべインがアプリケーションのコードを 編集する Java 工デイタです。 Visual Editor 工デイタ、 Java 工デイタ、 properties ビューの 3 者は連動しており、 いずれかのウインドウの内容を編集すると、その結果がほ かの 2 つのウインドウに反映されます。 図を見ると、 VisuaI Editor 工デイタにウインドウか表 示され、 JFrame クラスのインスタンスがぶじに生成され たようです。どのように実現されているのかをみてみまし 0 Visual Editor 工デイタと Java 工デイタのあいだにあ る△ボタンをクリックし、 Java 工デイタの表小領域を拡大 します。 MusicCatalog クラスの最初のほうに、このクラ スのデフォルト・コンストラクタ 3 が定義されています。 public MusicCata10g() { super() ; initialize() ; 図 9 Java VisuaI CIass ペ ーン Ja 0 C 55 ・ The ・新・面 f 製ま” ek ・亟 00 町 0 d - M リ朝 cC ・ 0 “ 0 New Java Visual ( に 55 : 当、 Sou 「 0 ・ Fo ・ r &SWT &Swng 第 App D ・叩 P•n ・ D 物 lo 要 紕 n Fr 聞 ロ P 聞 は S い翻 P 0 第釦 Pan ・ 朝 0 ト me 新 od ー wo ⅵ d u 版・ t00 「をい 凶 0 面献 9M0 池 ma 氛印 ) こ献′、改研第を研れを叩 0 , 凶物・・ d 市純 tn ・ th0 図 10 MusicCatalog クラス 図ま 0 ・ 0 , ・ ! のを砂・ : つ・ 0 , を属ツ「鬻を第を 0 : 物 Jav ・新一以 P 純 k ・第 0 颪・ - ロ Java ・ MusicCatalogoava - Echpse 円 a 日 0 丨 m 、 「こ第ツ第いを 町。朝・血。 OJS 局 第町赴聞 、る 0 「 0 やを物 に震 J 丨物 戛ー 1 ト Cok 第、、 訂・ P ・ 式増 P 新・ MusicCatalog クラスは JFrame クラスの派生クラス なので、 Jh•ame クラスのメソッドやプロバティを継承し ます。しかし、これらの機能を利用するには、 JFrame ク ラスのインスタンスを生成しなければなりません。それに は、 MusicCatalog クラスのコンストラクタに含まれてい る super() メソッドを呼び出します。 MusicCatalog クラスのコンストラクタには、もう 1 つ initialize() メソッドの呼出しがあります。このメソッド は、コンストラクタのあとで定義されています。 2. 左のペインで Java → Swing を選び、右のペインで JFrame Visual Class" を選択したあと、 [Next] ポ private VOid initialize() { this . setSize(300, 200 ) ; タンををクリックする。 this . setContentPane (getJContentPane ( ) ) ; 3. Java Visual Class ページが表示される ( 図 9 ) 。 this . setTit1e("JFrame") ; JFrame クラスの派生クラスの名前として、 Name フィ ールドに、、 MusicCatalog" と入力します。 MusicCat- this は、 MusicCatalog クラス自体を表すキーワード alog はアプリケーションで最初に実行されるクラスであ です。、、 this. setSize(300, 200 ) ; " は、 JFrame クラスの setSize() メソッドを呼び出して、フレームのサイズを 300 り、 main() メソッドをもっていなければならないので、 public static void main(String[] args)" をチェッ x 200 に言定します。 クします。その他はデフォルトのままで [Finish] をク 3 コンストラクタとは、クラスと同じ名前をもち、クラスのインスタンスを生成 リックします。 するときにかならず実行される匆期化処理を定義したメソッドです。引数の ないコンストラクタをデフォルト・コンストラクタといいます。クラスにコ 4. MusicCatalog クラスが生成され、 MusicCatalog プ ンストラクタを 1 つも定義しないと、コンパイル時になんの処理も実行しな ロジェクトに追加される ( 図 10 ) 。 いデフォルト・コンストラクタが自動的に生成されます。 2 褓、加 4 003 興。 20 ) 0 第 0 1 ヨ 2 S 、就”ぐ。“第物・ 1 ・も肄 : 0 0 を 、・ 0 ⅱ、破を、朝ィー ni れ・ⅱこ 00 ー 駅 " 、 - を 0 ー引ユ ( 3 ) を , - “ tC 聞【・戒は JCont ・物りト 曲 i いをい新「第′つ・ ・物ををい、 0 : をなー」臧を新 ! を都 0 ⅱ ! を、一・ⅱ場製・一一 JC ・を n ー p 町第 0 ー ー朝 [ 霞をを 02 を店町第 162 UNIX MAGAZINE 2004. 12
連載②ゆ se を味わう 表 5 新言又疋ノヾネルに追加するコンポーネント 図 17 実彳寺の MusicCatalog クラス l_: を : 検索乗件 ~ タイトル : アーティスト : ジャンル : - 「べ Music Catalog く 2> : 「 表 4 設疋パネル (jPane12) のプロバティ コンポーネント JRadioButton JRadioButton JRadioButton プロ / ヾティ text selected text text 言綻値 登録頂 true 丘リリースされた順 ?Java property Editor : : : : : : : : : : : 図 18 Java Property Editor ダイアログ ( フォントの設疋 ) プロ / ヾティ preferredSize 言値 400 , 75 N れ ~ 0 og i 00 D 穢 0 ⅲ 0 Gothic Lucida e ⅱ 0 版 StYle plain bO 00 動に Size 10 8 layout-alignment LEFT border-Line border-Titled 1 表示設定 JavaBean の実行 こまでの設定が終ったら、まずはコンポポックスに 、、すべて " カ俵示されるかを確認します。 MusicCatalog クラスのインスタンスを生成するコード はまだないので、 MusicCatalog はアプリケーションでは なく JavaBean のままです。そこで、 Run メニューか ら、 Run As" →、、 Java Bean" をクリックします。ソース コードの変更後に保存操作をしていないと、 こで Save Resources" ダイアログが表示されます。その場合には、 MusicCatalog. java" にチェックマークが付いているこ とを確認し、 [ OK ] ボタンをクリックします。 すると、、、 Music Catalog < 2 > " というタイトルのウ インドウが表示されます。、、ジャンル " コンポポックスを クリックし、、、すべて " という項目カ第ス疋されていることを 確認したら ( 図 17 ) 、、、閉じる " ボタンをクリックしてウィ ンドウを閉じます ( そうしないと、画面がウインドウだら けになってしまいます ) 。 表示言綻ノヾネルの作成 検索条件パネルと同じ要領で、検索タブ (jPanel) に表 示設疋パネルを追加します俵 4 ) 。 表示設定パネルでは、検索結果の表示順を指定します。 表示順を指定するオプションは、ラジオボタン (JRa- dioButton) で作成します。表示設疋パネルに表 5 のラジ オボタンをこの順番で配置します。 ここで、ラジオボタンのフォントをすこし小さくしてみ ましよう。 Java Beans ビューの jRadioButton を選択 して Properties ビューの font プロバティをクリックし、 UNIX MAGAZ 工 NE 2004. 12 横に表示されたボタンをクリックすると Java Property Editor ダイアログが表示されます ( 図 18 ) 。 こで Size を 12 から 10 に変更し、 [OK] ボタンをクリックします ( その他の 2 つのラジオボタンも、同様に設定します ) 。 の時点で、 MusicCatalog クラスの外観は図 19 のように なります。 ラジオボタンのグループ化 Visual Editor で追加したラジオボタンは、デフォルト では相互排他 ( いずれか 1 つだけが選べる状態 ) になって いません。このため、ラジオボタンをグループ化して、つ ねにどれか 1 つだけが選択されるようにします。これには ButtonGroup クラスを使用します。 ButtonGroup クラスは、複数のボタンからなるグル ープを相互排他にします。ボタンのグループを作成するに は、 ButtonGroup クラスの add() メソッドを呼び出し てボタンを追加します。グループに追加したボタンのどれ かを ON にすると、そのグループに含まれるほかのボタン はすべて OFF になります。 残念ながら、 Visual Editor で ButtonGroup クラ スのインスタンスを生成することはできないので、この部 匚コ「 : コ ー取 K 加 0 加 x 0 単 ed 0 いパー V 面 図 19 作成中の MusicCatalog クラス ( 3 ) をを第物 0 ・近リリ - スきれた第 0 第上・ 167
図 6 Visual Editor のカスタマイス画面 ; Ⅵ引ー Ed 0 ′ owt v リ・ d 第第 0 ・ Ab0 ・ h h w 新・叩・ 08 ” P 第・ not ・ b0 t めを 凶” P 「叩 0 代物ー V ・ w 凶・ nJav ー , V w 物 SwmzLookandFøel 区く none> こ M ・′第 - 要をげ met M ・ t . 。。 kAndF ・ こ」 CDE/Motf 00 馳れお上 w•n 要回 02 社 Mot 乱 00 从 n 醺 図 7 MusicCatalog アプリケーションの外観 イ常第一一検索条件 アーティスト : 第いジャンルすべて 表示設定ー ・を録類 0 最近ソソースされた幗 0 売上順 preferences 寰も Music ( ョ t 09 く 2 > : き ) ) Wot ・ nch 日 u 記朝 d 町 ト 3 物 d 試・ APP ・′ 0 ・ 0 & ー Path レ C 。ま Compiler D ・ト レ・ d 日 JUnt Task Ta T ゅ・ F 物・ RunfDebug ) Te 検索 検索牛パネル 表小設疋ノヾネル [ 検索 ] ボタン から構成されます。検索条件パネルは、ユーザーが検索条 表 2 VisuaI Editor のカスタマイス項目 件 ( CD のタイトル、アーティスト名、ジャンル ) を指定す Visual Editor 使用時の開発工竟の外 るためのものです。これらのフィールドをデフォルトのま 観 (Visual Editor 工デイタと Java まにすると、すべての CD カ験索されます。 ェデイタを分割線で区切られ規で表 表示設疋パネルでは、データベースの検索結果を表示す 示するか、それとも別々のタブに表示す るか、など ) る順序を指定します。詳細は次回以降に説明しますが、サ Code Generation Visual Editor によるコードの生成方 ンプル・データベースの各レコードは、 CD の ID 、タイ 法 (VisuaI Editor が生成したコード トル、アーティスト名、ジャンル、価格、リリース日、売上 に、 / / Generated" というコメントを 枚数の列で構成されています。デフォルトでは、 CD カ嶝 付けて区別する、など ) 録された順 ()D の ID の昇川頁 ) に検索結果を表示します。 Visual Editor プラグインをインストールすると、 Pref- [ 検索 ] ボタンをクリックすると、検索条件ノヾネルで指定 erences ダイアログの Java に、 VisuaI Editor" という項 された値にもとづいてデータベースを検索し、表示設疋パ 目が追加されます ( 図 6 ) 。 VisuaI Editor の設疋は、おも ネルで指定された値に従って検索結果を表示します。 に表 2 に示す 2 つのタブでおこないます。 新しいプロジェクトの作成 ■ MusicCatalog アプリケーションの作成 まず、新しいプロジェクトを作成します。前回説明した 今回は、図 7 のような GUI をもつアプリケーション プロジェクトの作成方法に従って、 MusicCatalog という MusicCatalog を作成します。このアプリケーションに 新しい Java プロジェクトを作成しましよう。 は、次の 2 つの機能があります。 アプリケーション・ウインドウの作成 サンプル・データベースからユーザーが入力した検索条 GUI をもつ Java アプリケーションは、あらかじめ用意 件に応じて音楽 CD の情報を検索し、結果を表示する。 されたボタンやラベルなどを組み合わせて作成します。た ・ユーザーが入力した新しい音楽 CD の情報をサンプル・ だし、これらのコンポーネントを組み合わせるには、それら データベースに登録する。 を入れるための、、容器 " が必要です。 Swing では、これを 今回は、まだデータベースの操作は考えず、 GUI の作成 、、コンテナ " と呼びます。コンテナには、コンポーネントを に専念します。 1 回だけ追加することができます。すでにコンテナに含ま MusicCatalog アプリケーションの 2 つの機能は、それ れているコンポーネントを別のコンテナに追加しようとす ぞれ、、検索 " と、、登録 " という 2 つのタブで実現されます。 ると、そのコンポーネントは最初のコンテナから削除され、 今回は、このうちの検索タブを作成します。 新しいコンテナに追加されます。 図 7 からも分かるように、検索タブは、 ところで、画面に GUI コンポーネントを表示するに V はいい伊 タブ Appearance 160 UNIX MAGAZINE 2004. 12
図 15 作成中の MusicCatalog クラス ( 2 ) , ic ( 載ま 表 3 オ件 / ヾネルロするコンポーネント (jPaneII) プロバティ コンポーネント タイトル : JLabel text columns JTextField 23 アーティスト・ JLabel text colurnns JText Field 23 ジャンル : JLabel text JComboBox preferredSize 257 , 25 し、 Visual Editor 工デイタでコンテナをポイントすると にの時点では、まだクリックしません ) 、そのコンポーネ ントを追加できる場所が四角形や直線のガイドとして表示 されるので、それを目安にするとよいでしよう。 jPane11 のレイアウト・マネージャーは FlowLayout なので、前 のコンポーネントの右横に次のコンポーネントを追加する と、コンポーネントの配置が自動的に調整されます。 ラスの addltem() メソッドを呼び出し、コンポポックスの 1 つの項目を Object 型で指定します。ジャンル・コンボ 同様に、検索条件パネル (jPane11) に表 3 の残りのコ ポックスは getJComboBox() メソッドで生成されます。 ンポーネントをこの順番で追加します。 Outline ビューの getJComboBox() をクリックすると、 1 行のテキストを入力するフィールドは、 JTextField ク Java 工デイタに getJComboBox() メソッドのコードが ラスで作成します。複数行にわたるテキスト入力を可能に 表示されます。ここで、 getJComboBox() メソッドの if したい場合は、 JTextArea クラスを使用します。 文の最後に以下のように addltem() メソッドの呼出しを JComboBox クラスは、コンポポックスを作成します。 追加します ( 下線部 ) 。 リストを最初から表示したい場合は、 JList クラスを使用 します。 JComboBox クラスには editable というプロバ private JComboBox getJComb0Box ( ) { ティがあり、これを、、 true " に設疋するとテキスト・フィ = 皿 11 ) { if (jComb0Box ールドと同様に編集できるようになります。ただし、そう jComb0Box. addltem(" すべて ") ; いう使い方は一ヨ殳的ではないようで、デフォルト値は false になっています。 MusicCatalog クラスは、この時点で図 15 のようになります。 、 jComboBox. " とピリオドまで入力してしばらく待つ コンポポックスの項目の追加 と、 Eclipse のコードアシスト機能によって JComboBox 、、ジャンル " コンポポックスには音楽 CD の検索条件に指 クラスのメソッドの一覧が表示されます。続いて、、、 addl" 定できるジャンルの一覧を表示しますが、現時点ではまだ まで入力すると、メソッドの一覧は addl で始まる 3 つのメ 空です。最終的には、う朝頁の、、すべて " とデータベースに登 ソッドに絞られます ( 図 16 ) 。ここで、、 addltem " を選択 録されているジャンルを表示しますが、今回は頁の、、すべ して Enter キーを押すと、 addltem() というコードが入力 て " だけを譿定します。 され、引数の入力待ちの状態になります。デフォルトでは、 こでの作業には Outline ビューを使用します。この 括弧や引用符は必要に応じて自動的に挿入されますが、同 ビューが表示されていない場合は、 Window メニューか じ文字を入力するとカーソルがその文字の上を移動してい ら、、 Show View" →、、 OutIine" と選びます。 OutIine ビ きます。なお、コードアシスト機能による補完が始まるま ューには、インポート、メンバー変数、メソッドの一覧が で時間がかかる場合は、 Preferences ダイアログで、、 Java" 表示されます。 、 Editor" →、、 Code Assist" を選択し、、、 Auto activa- tion delay" フィールドの値を減らしてみてください。 コンポポックスに項目を追加するには、 JComboBox ク 言値 図 16 コードアシスト旨 00 , ・・ ) ー、一一を引 0 ー J 以・ゝ 030 ー 0 戸」 01 聞をれ JC ( 動聞 OXO ー 「 1 、 C い第第 」 08b 聞代びをに・ ( を」一躔 a•t 0 増を 0 れ ( お 1 2 引リ物、物・ にのを : 第町を斌 P 新・ ・第都ト 0 れ“”・市 0 ま t•n• , JCo ”め 0 日ぃ 0 、” 0 - 鹵 l• d ′め d 賛 d ド・ 、。浦田”鉙“第地・ ( 物 Ch い口つを 物は一をを ′山い。物い。 C 引 卩 ) ー物癶ー引・ 0 0 return 」 ComboBox ; 166 UNIX MAGAZ 工 NE 2004. 12
連載②ゆ se を味わう 図 13 Java Property Editor ダイアログ 壑 a property Editor : 二 : : : : こニ : ニ 持されることを未します。 Visual Editor は、 jpanel 、 ・・のように、頁に小文字の j 、末 jPanelI 、 jPane12 、 尾に 0 からの連番 4 という命名規則にもとづいて swing コ ンポーネントを追加していきます。 Java 工デイタで、コードを見てみましよう。パネルを 追加すると、 getJContentPane() メソッドに add() メ ソッドの呼出しが書き加えられ、 JPanel クラスのインス タンスを生成する getJPane11() というメソッドが追加さ れます。コンテナにコンポーネントを追加するたびに のようなコンポーネント名付きの get メソッドが加わり ます。コンテナにコンポーネントを追加するには、コンテ ナの add() メソッドを呼び出し、追加するコンポーネン トのインスタンスを渡します。 add() メソッドを呼び出す と、コンポーネントがコンテナの最後に付け加えられます。 Visual Editor では、引数が 2 つの add() メソッドを使 用します。 2 番目の引数にはレイアウト・マネージャーで 定義される制約を指定しますが、今回の例では不要なので 無視してかまいません。 private JPane1 getJPane11 ( ) { if (jPane11 皿 11 ) { jPane11 = new JPane1 ( ) ; return jPane11 ; まず、パネルの推奨サイズを指定します。、、推奨サイズ " はそのコンポーネントの適切なサイズで、 preferredSize プロバティで制御します。たとえば、ラベルを追加してテ キスト、、 Hello World!" を表示する場合、そのラベルの推 奨サイズは、、 Hell 。 World!" という文字列全体の表示に必 要なサイズということになります。推奨サイズを指定しな いと、適切な値が自動的に計算されます。 jPaneII が選択されているた態で、 preferredSize プロ パティを、、 400 , 115 " に変更します。 次に、 Properties ビューの layout プロバティを展開し て、 alignment を RIGHT に変更します。 続いて、パネルに境界線と見出しを付けます。 border プ ロバティをクリックし、横に表示されたボタンをクリック すると、、、 Java Property Editor" ダイアログが表示され ます。 4 0 の場合は、末尾には何も付きません。 UNIX MAGAZINE 2004. 12 BO 国 Type 目 ne BO 川 W 川 1 EO 川 Co ー ー Named CO 恤再 easic ( 0 バ ■ 0 ロ 9 ~ n ロ lightGray ロ m 明をれい ロ 0 ロれ 0 ~ ロ pink ■ red ロ“物 ン ~ 、、 w ⅲ bO . Li れを eo ー 6 RGB Svstem ( 可 0 再 ・まロを ( 000n ロ議ⅳ ~ ( a 可 iO れ BO 祠 [ コ議ロⅳを ( 叩 tionT を ロ control ロ ( on D h OW ロ ( 0 れ tro 旧 h ⅱり恤 ロ ( on 0 儿田川 ロ ( 0 れ 0 h ま dOW 60 川円報ⅳ W 匚区コ匚ら 図 14 作成中の MusicCatalog クラス ( 第 00 ノヾネルの境界線の太さを、、 1 " に設定します。、、 Border Type" コンポポックス ( ドロップダウン・リスト ) から Line" を選び、 Java Property Editor ダイアログの外 観が図 13 のように変わったら、、、 Border Width" フィー 1 と入力します。 ルドに 次に、パネルに、、検索条件 " という見出しを付けます。 Border Type コンポポックスから、、 TitIed" を選択し、 、、 Title" フィールドに、、検索条件 " と入力します。ここで [OK] ボタンをクリックすると、 MusicCatalog クラスの 外観は図 14 のようになります。 次に、検索条件パネルに、、タイトル : " というラベルを追 加します。ラベルは JLabel クラスで作成します。 Visual Editor パレットの、、 Swing Components ' →、、 JLabel' をクリックし、 Visual Editor 工デイタまたは Java Beans ビューの jPane11 をクリックします。 Java Beans ビューに jLabel が追加されたら、ラベルの text プロバテ ィを、、タイトル : に設疋します。なお、 text プロバティ の値は Java Beans ビューでコンポーネントを右クリック し、、、 Set Text" を選択する方法でも言置できます。 Visual Editor パレットでコンポーネントをクリック 165
は、それらが、、包含階層 " に含まれていなければなりませ ん。包含階層とは、トップレベルのコンテナをルートとす るコンポーネントのツリーです。 Swing を用いてアプリケ ーションを開発するときは、このトップレベルのコンテナ ( アプリケーション・ウインドウ ) が最低でも 1 つは必要で す。 swing は、通常使用するトップレベル・コンテナとし て、 JFrame ( フレーム ) 、 JDialog ( ダイアログ ) 、 JApplet ( アプレット ) の 3 つのクラスを提供しますが、すくなくと も 1 つの包含階層のルートは JFrame クラスのインスタ ンスでなければなりません。たとえば、アプリケーション が 1 つのメインウインドウと 1 つのダイアログ・ボックス で構成される場合、アプリケーションの包含階層は 2 つで、 一方の包含階層のルートは JFrame クラス、もう一方のル ートは JDialog クラスのインスタンスとなります。 Java カ甘是供するクラスのうち、 AWT の Container ク ラスを継承しているものはコンテナとして使うことができ ・・じつはすべ ます。 Swing でこの条件に合致するのは、 てです。ラベルを表示するための JLabel クラスでさえ、 Container クラスを継承しています。 ただし、 GUI アプリケーションを開発するときは、 - ヨ殳 に JFrame クラス ( 図 8 ) を利用します。 JFrame クラス のインスタンスを生成すると、タイトルバーや境界線、、、閉 じる " ボタンや最大化ボタンの付いたアプリケーション・ウ インドウカ乍成されるからです。今回作成するアプリケー ションも、この JFrame クラスを使用します。 VisuaI Editor を使用すると すべてのトップレベル・コンテナには、、、コンテンツベ イン " があります。コンテンツベインとは、トップレベル・ コンテナの GUI のうち、目に見えるコンポーネントを含 むものをいいます。包含階層をなすコンテナ群にコンポー ネントを追加するには、このコンテンツベインを取得する 図 8 JFrame のクラス java 」 ang. Object java. awt. Component java. awt. Container java. awt. Window java. awt. Frame Javax. SWing. JFrame UNIX MAGAZINE 2004. 12 連載②ゆ se を味わう 必要があります。 たとえば、 JFrame クラスのコンテンツベインを取得す るには、 JFrame クラスの getContentPane() メソッドを 呼び出します。デフォルトのコンテンツベインは、 JCom- ponent クラスを継承するシンプルな中間コンテナです。 ただし、 getContentPane() メソッドが返すのは JCom- ponent クラスのインスタンスではなく、 AWT の Con- tainer クラスのインスタンスです。つまり、コンテンツ ペインの JComponent クラスの機能を利用するために getContentPane() メソッドの戻り値をタイプキャスト しなければならないというややこしいことになります。 JFrame クラスを用いてアプリケーションを作成する場 合、次の 2 つの方法があります。 ・ JFrame を継承する派生クラスを作成し、そこにコンポ ーネントを追加する。 プログラムのなかで JFrame クラスのインスタンスを 生成し、そこにコンポーネントを追加する。 VisuaI Editor を使うと、後者の方法で派生クラスカ 成され、派生クラス自体がフレームになります。そして、 getContentPane() メソッドの代わりに getJContent- pane() というメソッドが定義され、コンテンツベインと して JPanel クラスのインスタンスが生成されます。その ため、 JPanel クラスの機能を使ってレイアウト・マネー ジャーを変更したり、コンテンツベインの周囲に境界線を 描くといったことができるようになります。 swing アプリケーションを作成する基本的な手川頁は、次 のようになります。 1. JFrame クラスのインスタンスを生成 2. コンテンツベインの取得 3. コンテンツベインにコンポーネントを追加 この 1 ~ 3 の処理は、 Visual Editor が自動的に処理し てくれます。 それでは、アプリケーション・ウインドウを実際に作成 してみましよう。 1. Package Explorer ビューの、、 MusicCatalog" をマウ スの右ボタンでクリックし、、、 New" →、、 Other" と選択 すると新規作成ウイザードか起動する。 161
さきほど、アプリケーション作成の基本的な手順の 2 番目に、、コンテンツベインの取得 " を挙げました。この部 分の処理をおこなうのが、 this. setContentPane(get- JContentPane()) ; " です。 Visual Editor は、コンテン ッペインを取得するための getJContentPane() というメ ソッドを定義し、コンテンツベインとして JPanel クラス のインスタンスを生成しています。 JPaneI は、ほかのコ ンポーネントを貼り付けるスペースを提供するクラスです。 private javax. swing ・ jPane1 getJContentPane() { ー null) { if (jContentPane jContentPane = new Javax. swing ・ jpanel() ; コンテンツベインにコンポーネントを配置していくと、 getJContentPane() にコードが追加され、そのコードか ら新しいコンポーネントを生成するためのコードが再帰的 に呼び出されることが分かります。 プロバティの言聢とプロジェクトのヒルド トップレベル・コンテナの準備か整ったので、アプリケ ーションの GUI の作成にとりかかりましよう。最初に、コ ンポーネントのプロバティを設疋します。 VisuaI Editor は、クラスのプロバティを Proper- ties ビューで操作します。 Properties ビューが表示され ていない場合は、 Window メニューから、、 Show View" → Properties" と選択します。 Properties ビューには、 Vi - sual Editor 工デイタ、 Package Explorer 、 Java Beans ビューなどで選択されているコンポーネントのプロバティ カ俵示されます。 まず、アプリケーション・ウインドウのサイズとタイトル を変更してみましよう。 Java Beans ビューで、、 this " を 選び、 Properties ビューの size プロバティの値を、、 600 , 300 " に、 title プロバティの値を、、 Music CataIog" に設 定します。 プロバテイやコードを変更すると、 MusicCatalog ・ java タブに、、 * " ( アスタリスク ) が表示され、ツールバーの [Save] ボタンが選択可能になります。デフォルトでは、 こで [ Save ] ボタンをクリックするとプロジェクトが自動的 にビルドされ、プロジェクトの作成時に指定する bin ディ レクトリに class ファイルが生成されます。 [Save] ボタン をクリックしてもプロジェクトがビルドされないようにす UNIX MAGAZINE 2004. 12 連載②〃 pse を味わう るには、 Preferences ダイアログの Workbench" をクリ ックし、、、 BuiId automatically" のチェックを外します。 ビルド時にコンパイルエラーが発生したときは、 Prob- lems ビューにエラーメッセージが表示されるので、これを よく読んでエラーを修正しましよう。 レイアウト・マネージャーの言又疋 Visual Editor 工デイタや Java Beans ビューでコン テンツベインを選択して Properties ビューを見ると、コ ンテンツベインのレイアウト・マネージャー (layout プ ロバティ ) が BorderLayout に設疋されていることが分 かります。レイアウト・マネージャーは、コンテナ上のコ ンポーネントのサイズと位置を制御するオプジェクトです。 コンテンツベインのレイアウト・マネージャーを、、 nu Ⅱ ( な し ) " に設疋すると、コンポーネントごとにサイズや位置が 決定できるようになります。ただし、ユーザーがウインド ウのサイズを変更しても、各コンポーネントには反映され ません。そこで、レイアウト・マネージャーを使って各コ ンポーネントのサイズや位置の設定をコンテナに任せるわ けです。 BorderLayout マネージャーは、画面全体を NORTH 、 EAST 、 SOUTH 、 WEST 、 CENTER の 5 つの領域に 分けてコンポーネントを配置します。今回は、コンテンツ ペインのレイアウト・マネージャーを FlowLayout に変 更します。 FlowLayout マネージャーは、各コンポーネン トのサイズを動的に計算して推奨サイズに変更し、水平に 折り返します。 FIowLayout には、使いやすく、各コンポ ーネントカ実に見えるという利点があります。 Java Beans ビューの jContentPane を選択 : 犬態にし、 Properties ビューの layout プロバティの値をクリックす ると、横にボタンが表示されます。このボタンをクリッ クし、ドロップダウン・リストから、、 FIowLayout" を選択 します。 FlowLayout では、このほかにアラインメント (align- ment : 整列 ) や、水平方向と垂直方向の間隔などが設定 できます。 FlowLayout の alignment はデフォルトで CENTER ( 中央揃え ) に設定されているので、これを LEFT ( 左寄せ ) に変更します。 Properties ビューの lay- out プロバティの、、十 " を展開し、 alignment をクリック して LEFT を選択します ( 図 11 ) 。 163
図 12 タブ付きペイン窈乍成 物反阯・ R ・厩物、、′・ 5 ・第曲と挙歩ⅵ 0 物 図 11 レイアウト・マネーシャーの言正 隧ロ Value P 「 op ・秘 y 204204.204 レ 0 しは一 ou ロ 0 bo 「 d con on ・ ntO " 0 10n UNKNOWN enabled jContentPane 〉旧 n 肥 D 0 plain. 12 Co 「 bl k fO 「・ ound FlowLayout 〉 layo 〉旧 n 聞肥 hO 0 引叩 ve 代 gap タブ付きペインの作成 MusicCatalog アプリケーションには、、、検索 " と、、登 録 " の 2 つのタブがあります。このような、、タブ付きペイ ン " を作成するには、 JTabbedPane クラスを使います。 JTabbedPane クラスのインスタンスがタブ付きペインで ューで jTabbedPane を選択し、 Properties ビューの す。タブ付きペインに新しいパネル (JPaneI) を付け加え tabPIacement プロバティの値を LEFT に変更すると、 るたびに、新しいタブが 1 つ追加されます。タブ付きペイ タブはペインの左側へ移動します ( 図 12 ) 。 ンにタブを追加するには、 JTabbedPane クラスの add() コンポーネントの追加 メソッドまたは addTab() メソッドを呼び出します。 Vi- sual Editor は、 addTab() メソッドのほうを呼び出しま 次に、ユーザーの入力を受けるコンポーネントを追加し す。さっそく、検索タブを作成してみましよう。 ます。タブ付きペインに追加した JPanel クラスのレイア VisuaI Editor パレットで Swing Containers → ウト・マネージャーは、デフォルトで FlowLayout に設疋 JTabbedPane" を選び、 Visual Editor 工デイタか されています。 FIowLayout を使用する場合、通常はコン Java Beans ビューの jContentPane をクリックします。 ポーネントを整列しやすいように関連するコンポーネント すると、コンテンツベイン内にかなり小さなペインが表示 をまとめるパネルを追加し、その上にコンポーネントを配 され、 Java Beans ビューに jTabbedPane が追加され 置していきます。この方法で、検索条件パネルと表示設疋 ます。 パネルを作成します。なお、実行時のアプリケーション・ Java Beans ビューで jTabbedPane が選択されてい ウインドウが Eclipse 本体とは別のウインドウとして画面 る ) 大態で、 Properties ビューの preferredSize プロバテ 上のどこかに表示されているはずなので、実行時の外観を イの値を 590 , 265 に言定します。 確かめながら作業するとよいでしよう。 Visual Editor ノヾレットの、 Swing Containers → 検索条件バネルの作成 、 JPanel" を選び、 VisuaI Editor 工デイタまたは Java VisuaI Editor パレットの Swing Containers → Beans ビューの jTabbedPane をクリックすると、タ JPanel" をクリックし、 Visual Editor 工デイタまたは プ付きペインに見出しのないタブが表示されます。 Java Java Beans ビューの jpanel をクリックします。パネ Beans ビューで jPanel が選択されていることを確認し ル上に小さなパネルが追加され、 Java Beans ビューに たら、 Properties ビューの、、 tab title" プロノヾティの値 jpanell " が追加されます。 を、、検索 " とします。続いて layout プロバティを展開し、 コンテンツベインにコンポーネントを追加すると、小文 alignment を、、 LEFT" に変更します。 字の、、 j " で始まる項目が Java Beans ビューに追加されま デフォルトでは、タブはペインの上部に並べられます。 す。たとえば、 jPane11 は、このパネルを実装する JPanel これらのタブの位置は、 JTabbedPane クラスの tab- クラスのインスタンスが jPane11 というメンバー変数で保 Placement プロバティで制御されます。 Java Beans ビ Java 、 Mu 朝 ( ( 物ー•lava ・ [ 中 5 円 4 目 0 " n ロ、 Java 和ーロ P ・誌 ~ 0 ・ -0 P 0 社 0 マーー厩に M eC ・ 0 ′町 / 第 C 秋鹵要川 ・物 00 ー・ B ・新 に , 、第一 Co 増・ : ・爲い 0 や・物 釦 P ・ : J ー 00 を・ 5 2 島 い 0 宿の T ・ 時 3151 ] 0 0 ー 12 LEF 、 T CENTER RIGHT 報ーに・引もを第物 0 ~ 第 30b ! 駅宿Ⅳな 1 ・・に・ 0 ・物ー・ ~ ー・載 0 強を 0 い興価ー 0 、 : をい」な b し田を を 、トド増 00 ″ 0 ′気 0 物・”れー 01 164 UN 工 X MAGAZINE 2004. 12