CodeZine(コードジン)

特集ページ一覧

Javaで軽快に使える「軽量フレームワーク」特集
~クールなGUIをシンプルなスクリプトで作成するZK(3)

第22回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/09/02 14:00

目次

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を終了してください。とりあえず、これでサンプルのテーブルは用意できました。

ij.batを起動し、サンプルのデータベースファイルにテーブルを用意する
ij.batを起動し、サンプルのデータベースファイルにテーブルを用意する

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Javaで軽快に使える「軽量フレームワーク」特集

もっと読む

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5