プログラムのポイントをチェック!
それでは、プログラムの詳細について説明をしていきましょう。今回はちょっとソースコードが今までより長くなりましたが、ほとんどは既に説明した知識で理解できます。新たに覚えなければいけない点に絞って説明をしましょう。
●テキストと数字の相互変換について
まずは、ボタンをクリックして行っている処理についてです。ボタンをクリックしたときの処理は、アクションリスナーというもので行いました。これは、今回ActionClassという内部クラスとして定義しています。このactionPerformedメソッドに、クリック時の処理が記述されていることがわかりますね。
ここで行っているのは、「入力されたテキストを取り出して整数の値に変換し、計算をしてから結果をテキストに変換し表示する」というものです。そのためには、何よりもまず「テキストを数字に変換する」「数字をテキストに変換する」という処理が重要になってきます。これは、次のようにして行えます。
int 変数 = Integer.parseInt([String値]);
String 変数 = Integer.toString([int値]);
いずれも「Integer」というクラスの中に入っているメソッドを呼び出して行っています。こんな具合にすれば、テキストを数字(整数)として取り出したり、数字をテキストに変換したりできるわけですね。
なお、数字どうしの間なら、変換は簡単に行えます。数字の前に()で変換したいタイプを記述すればいいのです。例えば、実数であるdouble型の値Aをint型として取り出したいならばこうします。
int B = (int)A;
●例外処理について
Integer.parseIntでテキストを数字に変換する処理を行う場合、注意しなければいけない点があります。それは、「数字に変換できないテキストだとエラー(例外)が発生する」という点です。Javaでは、メソッドによっては「実行に失敗する」ということがあるのです。このparseIntもそうですし、その他にもさまざまなケースで「実行に失敗する」ということがあります。例えばファイルを開こうとしたらファイルが見つからなかったとか、指定のURLにアクセスしようとしたらそのサイトが存在しなかったとか、そうしたエラーにつながる操作というのはたくさんあるのです。
こうした実行時に発生するエラーのことを「例外(Exception)」と呼びます。冷害が発生すると場合によってはプログラムが強制終了してしまったりしますから、ちゃんと「冷害が起こったときにはこう処理しましょう」ということを用意しておかないといけません。そのために用いられるのが「try」という構文です。これは、以下のように記述をします。
try {
・・・例外が発生する可能性のある処理・・・
} catch(例外を受け取るためのインスタンス){
・・・例外発生時の処理・・・
}
tryの後の{}内に実行する処理を記述します。そしてその後のcatch以降にある{}部分に、例外発生時の処理を記述します。catchの()には、例外を受け取るための引数が指定されます。Javaでは、例外というのは「例外クラス」のインスタンスとして発生するのです。例外が発生すると、このcatchにジャンプし、()内の引数にその例外インスタンスが渡される、というわけです。例外クラスはその種類に応じてさまざまなものがありますが、とりあえずは「Exception」というクラスを()に指定しておけばよいでしょう。これは全ての例外の土台となるクラスです。これを指定しておけば、どんな例外が起こってもすべてここで受け止められます。
●ウインドウを閉じるときの処理
今回のプログラムでは、待望の「プログラムの終了処理」がつきました。ウインドウのクラスであるFrameクラスでは、クローズボックスをクリックするなどの操作をするとWindowEventというイベントが発生します。これは「WindowListener」というイベント処理のためのクラスを使ってイベント発生時の処理を行うことができます。
ただし、ActionListenerのようなものは、1つのクラスに1つのメソッドしか用意されていないのですが、WindowListenerでは全部で7つのイベント用メソッドが用意されています。implements WindowListenerしたクラスではこの7つのメソッド全てを用意しないといけないのです。
これはちょっと面倒なので、Javaには「あらかじめimplements WindowListenerしたクラス」というのも用意されています。それが「WindowAdapter」というものです。これを継承してクラスを作れば、必要なメソッドだけを用意すれば済みます。今回作成した「ExitClass」も、このWindowAdapterを利用したウインドウのイベント処理用クラスだったのですね。
クローズボックスをクリックしたときの処理は、windowClosingというメソッドとして用意しておきます。ここでは「System.exit(0);」というメソッドを呼び出していますね。System.exitは、プログラムを終了するためのものです。引数のゼロは、正常に終了したことを示すものです。windowClosingからこのSystem.exit(0)を呼び出せば、クローズボックスをクリックしてプログラムを終了できるというわけです。