広告

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
                      2011年11月16日

   Java総合講座 - 初心者から達人へのパスポート
                 2009年11月開講コース 045号

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■


-------------------------------------------------------
・現在、このメールマガジンは以下の2部構成になっています。
[1] 当初からのコース:vol.xxx(xxxは番号)が振られています。
   これは現在、中級レベルになっています。
[2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。
   これは現在、初心者向けのレベルになっています。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


========================================================
◆ 01.データベースを使用するアプリケーションの開発(続き)
========================================================

前回まで「新規登録」の機能を実装してきました。これに関し
ては、付加的な作業を最後の演習(当記事の最後のほうにある)
にしておきましたので、余裕のある人は各自やってみて下さい。


今回からは、データ(人事情報)を検索する機能を組み込んで
いくことにします。


まず、検索の機能を組み込むためにHumanResourceEntryPaneに
「検索」のタブを追加することにしましょう。

では、HumanResourceEntryPaneのDesignビューを開いてください。

(1) Palette(パレット)の中のContainersの配下のJPanelをクリッ
クし、「新規登録」タブの右側(「検索」のタブを追加したい位置)
をクリックします。

(2) そうすると「New tab」というタブが作られますね。ここで貼り
付けたJPanelはこれまでの手順通りに作った場合はpanel_1という
名前になっているはずです。
画面の左端のStructureの配下のComponents欄の一番下にpanel_1と
いう名前でJPanelがリストされているはずなので、それをクリック
して下さい。
すると、Properties欄にこのJPanelのプロパティーがリストされます
ね。その中のTabの配下(Tabの左側の+マークをクリックすると展開
する)のtitleというプロパティーの値が「New tab」になっています
ね。これを「検索」に書き換えて下さい(最後にEnterキーを押すこと
により入力を完了させます)。
これで、追加したタブに「検索」という文字列が表示されますね。

(3) このJPanelをGridBagLayoutにしましょう。(最初はFlowLayout
になっているはずです。)
Properties欄のLayoutの右端の▼ボタンをクリックし、リストの中
からGridBagLayoutを選択して下さい。

これで、「検索」タブのページの下地が完成しました。

なお、この画面上で「新規登録」のページと「検索」のページを切り
替えるには、それぞれのタブをダブル・クリックします。


では、今度は検索用のキーワードを入力するためのテキスト・フィー
ルドを貼り付けることにしましょう。

ここでは、検索に使うキーワードは氏名と年齢だけにします。
キーワードにしたいものは部署名など他にもあるでしょうけど、必要
な人は各自の演習として自分で付け足してください。


では、Designビュー上の「検索」のページ(panel_1)に次の手順で
ラベル(JLabel)とテキスト・フィールド(JTextField)を貼り付けて
いってください。


(1) Paletteの中のComponentsの配下のJLabelをクリックし、「検索」
のページの「column 0, row 0」が表示される位置に貼り付けます。

(2) 貼り付いたラベル(JLabel)に「以下を入力してください。」と
いうテキストを入力してください。(Properties欄のtextプロパ
ティーの値(現在は「New label」になっているはず)を
「以下を入力してください。」に書き換えます。)

(3) 再度、Paletteの中のComponentsの配下のJLabelをクリックし、
今度は先ほどの「以下を入力してください。」というラベルの下
(「column 0, row 1」が表示される位置)に貼り付けます。

(4) 貼り付いたラベルに「氏名」というテキストを入力してください。

(5) Paletteの中のComponentsの配下のJTextFieldをクリックし、
先ほどの「氏名」というラベルの右側(「column 1, row 1」が表示さ
れる位置)に貼り付けます。


では次に、年齢で検索するためのテキスト・フィールドを貼り付けたい
のですが、検索の仕方は「x歳からy歳まで」というように年齢の下限
と上限で検索できるようにしたいと思います。
したがって、テキスト・フィールドは2個貼り付けることにします。

(6) 再度、Paletteの中のComponentsの配下のJLabelをクリックし、
今度は先ほどの「氏名」というラベルの下(「column 0, row 2」が
表示される位置)に貼り付けます。

(7) 貼り付いたラベルに「年齢」というテキストを入力してください。

(8) Paletteの中のComponentsの配下のJTextFieldをクリックし、
先ほどの「年齢」というラベルの右側(「column 1, row 2」が表示
される位置)に貼り付けます。

(9) 次に、そのテキスト・フィールドの右側(「column 2, row 2」が
表示される位置)に、再度JLabelを貼り付けたいのですが、今の状態だ
と画面上に「column 2, row 2」のセルが表示されていないでしょう。
そこでテキスト・フィールドをクリックするとDesignビューの上のほう
に矢印のマークのアイコン(ボタン)がたくさん横並びにリストされます
ので、そのうちの右端から2つ目の右向きの三角形のボタン(マウス・
ポインターをそこに持っていくと「Horizontal grow」と表示される
ボタン)をクリックして下さい。
すると、「column 2, row 2」のセルが広がりますので、そこにJLabelを
貼り付けます。

(10) 貼り付いたラベルに「歳から」というテキストを入力してください。

(11) そのラベルの右側(「column 3, row 2」が表示される位置)に、
再度JTextFieldを貼り付けてください。

(12) 次に、そのテキスト・フィールドの右側(「column 4, row 2」が
表示される位置)に、再度JLabelを貼り付けてください。(セルがなけ
れば(9)と同じく「Horizontal grow」ボタンをクリックして広げておき
ます。)

(13) 貼り付いたラベルに「歳まで」というテキストを入力してください。


はい。では、貼り付いた各JLabelやJTextFieldのレイアウトを調整して
おきましょう。

まず、「以下を入力してください。」のJLabelをクリックすると周囲に
ハンドル(緑色の小さな四角形)が表示されるので、そのうちの右端の
ハンドルを4つ右の格子の位置(column 4の位置)まで引っ張る(ドロッ
プ&ドロップする)ことによってのJLabelを複数のセルにまたがらせます。

また、Designビューの上のほうにある横並びの矢印マークのボタンのうち、
左向きのボタン(マウス・ポインターをそこに持っていくと「左」と表示
されるボタン)をクリックします。こうすると、文字列が左揃えで表示さ
れることになりますが、現時点では幅が狭いため見た目には区別がつかな
いだろうと思います。ちなみに、これはProperties欄のConstraints配下の
anchorプロパティーで「WEST」を選択することによっても行えます。

同様に、「氏名」ラベルの右側のテキスト・フィールドをクリックして、
右端のハンドルをcolumn 4の位置まで引っ張って下さい。こうしてテキス
ト・フィールドの幅を十分に広げるのです。


では次にJButtonを貼り付けたいのですが、その前にその土台となる
JPanelを貼り付けておきましょう。

PatetteのContainers配下のJPanelを選択し、「年齢」ラベルの下
(「column 0, row 3」が表示される位置)に貼り付けてください。

これの右端のハンドルを引っ張って、5つのセルにまたがらせる(「歳まで」
の直下の位置まで引っ張る)ようにしましょう。

次に、PaletteのComponents配下のJButtonを選択し、この土台(JPanel)に
貼り付けてください。

そして、このJButtonの(Properties欄の)textプロパティーの値を「検索」
にしましょう。つまり、ボタンに「検索」という文字が表示されるように
します。

このままだと、この「検索」ボタンは「年齢」の行にピタリと
くっついていて見苦しいですね。

「検索」ボタンの土台のJPanelをクリックし、Properties欄のConstraints
配下のinsetsプロパティーの右端のボタンをクリックして「インセット」
ウインドウを表示し、「上」欄の値を10にして「OK」ボタンをクリック
しましょう。


ついでに一番上の「以下を入力してください。」ラベルの
下にも少しスペースを空けてバランスを取ることにしましょう。

「以下を入力してください。」ラベルをクリックし、Properties欄の
Constraints配下のinsetsプロパティーの右端のボタンをクリックして
「インセット」ウインドウを表示し、「下」欄の値を10にして「OK」ボタン
をクリックしましょう。


あと、「歳から」ラベルと「歳まで」ラベルのそれぞれの左側にある
テキスト・フィールドの幅を広げておきましょう。
まず、Properties欄の右から2つ目の「Show advanced properties」ボタン
(黄色い右向き矢印が描かれているボタン)をクリックすることによって、
詳細のプロパティーのリストを表示するようにしておきましょう。

テキスト・フィールドをクリックし、Properties欄のminimumSizeという
プロパティーの右端のボタンをクリックします。
minimumSizeウインドウにおいて「幅」欄の値を30にして「OK」ボタンを
クリックしましょう。
これをそれぞれ2つのテキスト・フィールドに対して行っておきましょう。



この検索のページでは、「検索」ボタンをクリックしたら、各テキスト・
フィールドに入力されている値を使ってEMPLOYEEテーブルを検索し、該当
するデータを取り出して表形式で画面上に表示するようにプログラミング
することにします。

このとき、表形式でデータを表示するために使うGUI部品にJTableというの
があります。


(続く)


では、また来週。



========================================================
◆ 02.文法解説 [演算子]
========================================================

[条件演算子?:]
ちょっとかわった演算子として条件演算子?:があります。

これは、論理値を返す式または論理値を持つ変数aに対して

a ? (aの値がtrueのときに返す値) : (aの値がfalseのときに返す値)

というふうに指定して使う演算子で、オペランドを3つ取るものです。

例えば、

---------------------------------
boolean a = true;
boolean b = false;
int y;
int z;
y = a ? 0 : 1;
z = b ? 0 : 1;
---------------------------------

とすると、yには0が代入され、zには1が代入されることになります。
これは、

---------------------------------
boolean a = true;
boolean b = false;
int y;
int z;
if (a) y = 0;
else y = 1;
if (b) z = 0;
else z = 1;
---------------------------------

とするのと同じ働きをします。

なお、この演算子を複数組み合わせた場合は、右の演算子から先に
処理されます。

例えば、
a?l:c?m:e?n:o

a?l:(c?m:(e?n:o))
と同じ処理になります。


(続く)



================================================
◆ 03.演習問題
================================================

1.
上記の演算子の振る舞いを確認するために、下記のようなプログラム
を作って実行してみてください。

--------------------------------------------------------
public class ConditionalOperationTest {

  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     int y;
     int z;
     y = a ? 0 : 1;
     z = b ? 0 : 1;
     System.out.println("[Example 1]");
     System.out.println("boolean a = true;");
     System.out.println("boolean b = false;");
     System.out.println("int y;");
     System.out.println("int z;");
     System.out.println("y = a ? 0 : 1;");
     System.out.println("z = b ? 0 : 1;");
     System.out.println("Result: y = " + y);
     System.out.println("Result: z = " + z);

     if (a) y = 0;
     else y = 1;
     if (b) z = 0;
     else z = 1;
     System.out.println("-------------");
     System.out.println("boolean a = true;");
     System.out.println("boolean b = false;");
     System.out.println("int y;");
     System.out.println("int z;");
     System.out.println("if (a) y = 0;");
     System.out.println("else y = 1;");
     System.out.println("if (b) z = 0;");
     System.out.println("else z = 1;");
     System.out.println("Result: y = " + y);
     System.out.println("Result: z = " + z);

     System.out.println("\n[Example 2]");
     System.out.println("int z;");
     z = (10 > 0) ? 1 : 0;
     System.out.println("z = (10 > 0) ? 1 : 0;");
     System.out.println("(10 > 0が真であれば1偽であれば0)");
     System.out.println("Result: z = " + z);

     a = false;
     boolean c = true;
     boolean e = false;
     int l = 1;
     int m = 10;
     int n = 100;
     int o = 0;
     y = a?l:c?m:e?n:o;
     System.out.println("\n[Example 3]");
     System.out.println("boolean a = false;");
     System.out.println("boolean c = true;");
     System.out.println("boolean e = false;");
     System.out.println("int l = 1;");
     System.out.println("int m = 10;");
     System.out.println("int n = 100;");
     System.out.println("int o = 0;");
     System.out.println("int y;");
     System.out.println("y = a?l:c?m:e?n:o;");
     System.out.println("Result: y = " + y);
     y = a?l:(c?m:(e?n:o));
     System.out.println("y = a?l:(c?m:(e?n:o));");
     System.out.println("Result: y = " + y);
  }
}
--------------------------------------------------------


2.
HumanResourceEntryPaneの「登録」ボタンをクリックすると新規登録は
行われますが、その後、各テキスト・フィールドなどに入力されたデータ
はそのまま残ったままになりますね。

続いて別の社員の情報を入力するときは前に残った入力データが邪魔に
なるかもしれません。

そこで、「クリア」ボタンを用意して、入力データを消去するようにし
ましょう。

「登録」ボタンの右側に「クリア」ボタン(「クリア」と書かれたボタン)
を貼り付けておき、「クリア」ボタンをクリックしたら、テキスト・フィー
ルドに入力されているデータをすべて空っぽにするようにプログラミング
してみてください。



(次回に続く。)


では、また来週。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2011 Future Lifestyle Inc. 不許無断複製