目次> 第5章 | TOPUPPREVNEXT |
今日は、2つの数を与え、それらの和、差、積、商を表示することを考えましょう。 プログラミングの第1歩は、計算手順とデータの切り離しから始まります。
「どんな2数に対しても答(和、差、積、商)を表示する」プログラムを作るのですが、簡単のために 次のことを前提にしましょう。
また、2数の与え方については、次の2通りを考えましょう。
コマンドラインから実行する際に、データをあたえる方法(5.1節)、 例外の発生(5.1節)、 条件分岐(if文)による例外発生の回避(5.2節)、 テキスト・フィールド(5.3節)
if文の書き方は、この章のもっとも重要な部分ですので、5.2節の説明と、 if文の解説 を復習しましょう。
結果が true か false になる式については、 2つの値を比較する演算子(次の6つ)をおぼえましょう。
< | <= | > | >= | == | != |
5.3の Compute4.java は長いプログラムですが、43行目以降は、 ラベルや、ボタン、テキストフィールドを順に貼り付けているだけですから、 順に根気よく追いかければ理解できます。 どうしてもダメなら、ここで表示された四角い枠を作るには、
以下はおまけです。 気が向いたら、次章に行く前に寄り道をしてみてください。 後半の「おまけ 第2弾」の(クラス化)は10章に進んだときに、 (内部クラス)以降は19章に進んだときに読み返してみてください。
テキスト・フィールドに数字をいれて、 おもむろにマウスでボタンをクリックする ―― という操作はまどろっこしいですね。
テキスト・フィールドのアクションリスナは、 「 Enter 」キーを監視してくれます。つまり、 テキスト・フィールドの入力中に、「 Enter 」キーが押された時 アクションリスナの actionPerformed メソッドを呼び出してもらえます。
テキスト・フィールドの切替えは、「 Tab 」キーでできます。 テキスト・フィールドにアクションリスナを付けておけば、 一連の操作にマウスが不要になります。
ボタンを押された時にすべきことは、ボタンのアクションリスナに 記述ずみですから、(おなじアクションリスナなので、そのまま) テキスト・フィールドのリスナにしてしまうことができます。
通常、上の欄に数字をいれ、タブ・キーをおし、下の欄に数字をいれ、 エンター・キーをおす という操作をすると想定し、 下の欄( area2 )にアクションリスナをつけました。 プログラムを短くしたいので、 Compute4.java の表示を2数の和と差のみにしたものを もとに説明をします。
和と差を表示するプログラム TextFieldDemo.java
実行例
ボタンを取りはずしたプログラム TextFieldDemo2.java
実行例
上の欄でも、下の欄でも、エンター・キーを効かせるには、同じアクションリスナを area1 にもぶらさげてしまいましょう。 28〜35行目をコピー・アンド・ペーストで24行目以降にコピーし、25行目の area2 を area1 に変更するだけです。
上下2欄にアクションリスナを登録したプログラム TextFieldDemo3.java
同じアクションリスナが2ヶ所にぶらさがって醜いと感じるかたのために、
JTextField というオリジナルの部品をつかうと
これら3つの処理がすんでいる InputField というテキスト・フィールドを 作ってしまいましょう。 プログラムの中に、クラス宣言が2つあります。クラスが別ですので、 InputField クラスのなかで、 TextFieldDemo4 クラスの変数を参照する際、 TextFieldDemo4. をつけてクラスを明示しなければなりません。 おなじプログラム内ですので、 public 変数にする必要はありません。
ソース・プログラム TextFieldDemo4.java
上記のクラス化では、独立した別のクラスにしたため、 変数の参照がしにくくなりました。 TextFieldDemo4 クラスの内部に TextFieldDemo4 でしか使用しない InputField クラス を記述すれば、 TextFieldDemo4 の変数をクラス名をつけずに参照できます。
main メソッド内で 内部クラスを直接参照できませんので、 JFrame を継承した TextFieldDemo5 をつくり、 コンストラクタ内で 内部クラスを参照します。
ソース・プログラム TextFieldDemo5.java
ソース・プログラム TextFieldDemo6.java
ソース・プログラム TextFieldDemo7.java
これらはプログラムのつくりが違うだけで、実行結果は
TextFieldDemo3.java
と同じです。プログラム・リストの赤字による変更箇所は、
TextFieldDemo3.java との比較です。
更新日:2003-05-21