ZIndex変更時のイベント処理
このスクリプトではもう1つ、「ウインドウを閉じる」ための処理が用意されています。これは、メニューを選んだら、1番手前にあるWindowの「onClose」メソッドを呼び出してウインドウを閉じる、というものです。問題は、どうやって1番手前にあるウインドウを知るかということです。いろいろやり方は考えられますが、ここでは「ZIndex変更時のイベント」を利用することにしました。
ZIndexは、コンポーネントの重なり順を示すプロパティです。ウインドウをクリックして1番手前になると、必ずこのイベントが発生します。これを利用し、ZIndexが変更されるイベントが発生したら、そのイベント発生源となるコンポーネントを、1番手前に移動したコンポーネントとして変数selectedWindowに保管するようにしておく、というわけです。こうすれば、selectedWindowには常に1番手前のWindowが保管されることになります。
イベントの組み込みは、Windowインスタンスを作成したところで行っています。これは「addEventListener」というメソッドを利用します。
mywindow.addEventListener("onZIndex",new MyAdapter());
ZKのイベント処理は、Swingなどと同様にデリゲーションイベントモデルを採用しています。しかし、Swingなどのようにイベントリスナーが細分化されているわけではありません。イベントリスナーは「EventListener」というクラス1つだけで、組み込みも「addEventListener」があるのみです。
ではどうやってイベントの区別をするのかと言うと、addEventListner時に、組み込むイベント名とイベントリスナーをそれぞれ引数に指定しておくのです。例えば、ここでは"onZIndex"というイベントに、MyAdapterを組み込んでいます。このようにして、特定のイベントにイベントリスナーを割りつけるようになっています。
肝心のイベントリスナーですが、これはEventListenerをimplementsして作成します。クラスには、「doEvent」というメソッドを1つ用意します。
class MyAdapter implements EventListener { public void onEvent(Event event){ selectedWindow = event.getTarget(); } }
onEventでは発生したイベントの情報をまとめたEventクラスのインスタンスが渡されます。この「getTarget」メソッドにより、イベントが発生したコンポーネントを取得できます。ここでは、この値をselectedWindowに設定しています。ZKには、onZIndex以外にも各種のイベントが用意されており、すべてこれと同様にして処理を組み込むことができます。
JavaDBへのアクセス
最後に、ZKからデータベースにアクセスする方法について整理します。ZKには、データベースアクセスのための特別な機能は用意されていません。しかし、ZKは一般的なWebアプリケーションのようにクライアントとサーバにわかれて設計せず、普通のアプリケーションと同じ感覚でプログラムを設計できます。従って、ごく普通のアプリケーションと同じ感覚で、データベースアクセス用のクラスを作成し、それを必要に応じて呼び出して処理すれば良いのです。
では、サンプルとして、Javaに付属するJavaDBを利用してデータベースアクセスする例を考えてみましょう。JavaDBは、JDK/JREとは別のディレクトリにインストールされています(通常、C:\Program Files\Sun\JavaDB)。データベースを操作する場合には、インストールディレクトリ内の「bin」内にある「ij.bat」を利用するのが良いでしょう。これを起動すると、コマンドプロンプト・ウインドウが開き、JavaDBのコマンドを直接実行できるようになります(なお、そのまま起動すると、JavaDBのログファイルの出力に失敗するエラーが現れることがあります。このような場合には、管理者としてij.batを実行してください)。
起動したら、まずデータベースファイルに接続します。JavaDBでは、データベースサーバとしてJavaDBを起動し、それに接続する方式と、直接データベースファイルにアクセスする方式があります。ここでは扱いが簡単な後者の方式を利用します。ここでは、Cドライブ直下に「DerbyDatabases」というフォルダを用意し、この中に「sampledata」というデータベースファイルを作成して利用することにしましょう。ij.batのコマンドプロンプト・ウインドウで、次のように実行し、C:\DerbyDatabases\sampledataというデータベースファイルを作成して接続してください。
connect 'jdbc:derby:C:\DerbyDatabases\sampledata;create=true';
続いて、簡単なテーブルを作成しておきましょう。name,mail,telといった項目を持つSampleRowDataテーブルを作成します。
create table SampleRowData (name varchar(10) primary key,mail varchar(30),tel varchar(20));
ダミーのデータも次のようにいくつか用意しておきます。
insert into SampleRowData values ('tuyano','tuyano@mac.com','090-9999-9999'); insert into SampleRowData values ('太郎','taro@yamada.com','080-8888-8888'); insert into SampleRowData values ('花子','hanako@tanaka.com','070-7777-7777');
作成後、「select * from SampleRowData;」でデータが保管されていることを確認してから、ij.batを終了してください。とりあえず、これでサンプルのテーブルは用意できました。