CodeZine(コードジン)

特集ページ一覧

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

第20回

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

目次

イベント処理とアラート表示

 では、ZULコンポーネントの基本的な使い方が分かったところで、次に簡単なイベント処理を行ってみましょう。プッシュボタンを用意し、クリックしたら簡単なメッセージを表示させてみます。

<?page title="Index Page"?>
<window title="Welcome to ZK!" border="normal" width="300px">
  <label>これは、ZKで作成したページです。</label>
  <separator/>
  <button label="click" onClick="alert(&quot;こんにちは!&quot;)" />
</window>
ボタンをクリックすると、アラートが表示される
ボタンをクリックすると、アラートが表示される

 先ほどのindex.zulをこのように修正してください。アクセスすると、「click」というボタンが表示されます。これをクリックすると、ブラウザ内に「こんにちは!」と表示されたアラートウインドウが現れます。

 ここでは、<button>というタグでプッシュボタンのコンポーネントを配置しています。このタグでは、labelでボタンに表示するテキストを指定し、「onClick」でクリック時に実行する処理を設定しています。

 今回は、"alert(&quot;こんにちは!&quot;)"というテキストを実行しています。これは、「alert("こんにちは!")」という処理になります。このalertを実行するだけで、メッセージをアラートウインドウで表示できます。

 このalertは、JavaScriptで多用されているalert関数ではありません。「グローバル関数」と呼ばれるもので、ZKに独自に用意されているものです(グローバル関数については後述します)。

 最後に、<separator/>についても触れておきましょう。これは、改行するためのタグです。ZKでは、コンポーネント類を<window>内に組み込むと、そのまま横に並べられていきます。改行する場合は、明示的に<separator/>を記述します。

ユーザーからの入力を処理する

 今度は、ユーザーからの入力を利用して処理を行ってみましょう。テキストの入力フィールドを用意し、そこに入力した値を使って計算を行ってみます。

<?page title="Index Page"?>
<window title="Welcome to ZK!" border="normal" width="300px">
  <label>正の整数を入力:</label>
  <separator/>
  <textbox id="text1" />
  <separator/>
  <button label="click" onClick="doAction()" />
  <zscript>
  void doAction(){
    String s = text1.value;
    int n = Integer.parseInt(s);
    int re = 0;
    for(int i = 0;i @lteq n;i++){
      re += i;
    }
    alert("合計:" + re);
  }
  </zscript>
</window>
ボタンをクリックすると、ゼロから入力した数字までの合計を計算し表示する
ボタンをクリックすると、ゼロから入力した数字までの合計を計算し表示する

 ここでは、ゼロから入力した数字までの合計を計算して表示させています。スクリプトを見ると、<textbox>というタグが用意されています。これが、入力フィールドのコンポーネントです。また<button>では、onClick="doAction()"というように修正されています。これにより、クリックするとdoActionという、Javaのメソッドに相当するものが呼び出されるようになります。(このdoActionが何かは、この後で)

 このdoActionは、その後にある<zscript>というタグの中で定義されています。この<zscript>は、スクリプト言語を使った処理を記述するためのものです。これにより、GUIを記述しているzulファイル内に処理を埋め込むことができるわけです。

使用言語は「Java」!?

 では、ここで使われているのはどういう言語なのでしょうか。よく見ると、どこかで見覚えのある感じがしませんか? Integer.parseIntなんて、なかなか他の言語ではお目にかからないものじゃないでしょうか。そう、これは「Java」なのです!

 といっても、完全なJavaというわけではありません。よく見ると、繰り返し部分がfor(int i = 0;i @lteq n;i++)と書かれています。これは、Javaならばfor(int i = 0;i <= n;i++)となるべきものです。

 この1文を見てピンときた人は、かなりなJava通でしょう。正解は「BeanShell」です。BeanShellは、Javaのインタープリタです。Javaのソースコードをその場で実行することが可能です。それだけでなく、クラスやメソッドとして定義しなくとも、ただ行わせたい処理をそのまま記述するだけで実行できます。ここでのdoActionなどは「グローバル関数」といって、クラスなどを用意せず、いきなり関数を定義して利用することができるBeanShellの機能を使っています。

 このように、Javaという言語をそのままスクリプト言語として利用できるようにしたものがBeanShellである、といってもよいでしょう。ただ単に文を書いて実行するだけでなく、面倒な定義などを極力省略して使えるように再構築されたJava、それがBeanShellです。

 ZKでは、Java(BeanShell)だけでなくさまざまな言語を使って処理を記述することが可能です。<zscript>タグに「language」という属性を用意することで、Java以外の言語を使うことができます。標準で利用可能なものとしては、JavaScript、Jython、JRuby、Groovyといったものがあります。これらはZKライブラリの「ext」フォルダ内に用意されているJarファイルを使うことで利用可能となります。先に、「bsh.jar」をWEB-INF/lib内に移動しましたが、これがBeanShellのライブラリファイルだったのです。

 先程、alertというものを利用しましたが、これもJavaにはない機能で、BeanShellで用意されたグローバル関数です。BeanShellを利用していればこそ、こうした安直な機能の拡張が可能なのです。


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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

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