今回は、OpenLaszloで標準で提供されている主なコンポーネントについて、サンプル満載で紹介します。LZXの特徴であるソースのXML構造にも注目しながら見てください。サンプルについては、いかにもサンプルといったものもありますが、よく使うものは実践に役立つようなサンプルになるよう工夫してみました。
<view>
これまでにも何度か出てきましたが、まずは基本中の基本<view>です。width、height、bgcolorの3つを設定したときに画面上に表示されます。
リスト1にあるcornerradius(SWF10/HTML5で対応)はビューを角丸にする属性です。
<view>の中にある<dragstate>は、ビューをドラッグアンドドロップ可能にするタグです。ビューのonmousedownとonmouseupで<dragstate>のapply()、remove()を実行して、ドラッグアンドドロップできるようにしています。
ドラッグできるということは、xとyが変わります。ビューをドラッグしたとき、つまりxとyが変わったとき(onxとony)に、それぞれのイベントハンドラでビューが画面からはみ出さないようにスクリプトを記述しています。
<text>
文字列を表示するという、極めて使用頻度の高いタグです。装飾系のいろいろなオプションがあります。リスト2を参考にしてください。
ボタン
リスト3のサンプルは、1つめのボタンを押すたびにボタン文字列が変わります。同時に2つめのボタンの有効化/無効化の設定をしています。
3つめの青いボタンは、好きな画像でボタンを作った例です。<resource>の中でノーマル時、マウスオーバー時、マウスダウン時の自作ボタン画像を<frame>で指定します。このとき<frame>の記述する順番に意味があるので注意です。その<resource>の名前を<basebutton>のresource属性で指定すればOKです。
ウインドウ
ウインドウコンポーネントには<window>、<alert>、<modaldialog>があります。
<window>はこれまでにもときどき出てきましたが、サンプルをご覧のとおりの一般的なウインドウです。
<alert>は文字列と閉じるボタンのみを扱えるアラートウインドウです。このウインドウが表示されている間は画面の他の部分を動かすことはできません。
<modaldialog>は文字列だけの<alert>とは違って、普通の<window>のようにいろいろなコンポーネントを入れることができます。リスト4ではチェックボックスを入れてみました。<modaldialog>も<alert>と同じく、表示中は画面の他の部分を動かすことはできません。
<checkbox>
<checkbox>はチェックの有無についてtrue/falseをvalue属性値として返します。オーソドックスにフォームの一要素として使えるのはもちろん、コンストレイント式を使って他のコンポーネントとリアルタイムで連動できます。
サンプルでは、チェックボックスのチェックオンオフに連動してボタンの有効/無効や赤四角の可視/不可視を制御しています。
ラジオボタン
ラジオボタンは<radiobutton>を<radiogroup>で囲います。選択された項目の値はvalue属性で取得できます。value値が数字以外の時は、リスト6のように ' で囲います。デフォルトでは一番上の項目が選択されている状態になります。
<combobox>
HTMLでいうセレクトボックスです。<textlistitem>を使って選択項目の表示文字列と値を設定していきます。これもvalue属性で値を取得できます。
リスト7のように固定的な選択肢を埋め込むには、<textlistitem>で直接文字列を指定します。データセットのXMLデータをもとに選択肢を動的生成するにはリスト8のように書きます。このやりかたは、たとえばデータベースから選択項目を取り出して表示する場合などに使えます。
リスト8の(注)の記述で、$path{}というのは、textやvalueなどの属性値をXPathでデータパスから取得するという意味です。
<edittext>
入力欄のコンポーネントです。入力値はvalue属性で取り出せます。1つめはノーマル、2つめは入力文字がアスタリスク表示になるパターンです。
リスト10は少し応用でログインパネルを作ってみた例です。onkeyupでキー入力の瞬間をイベントハンドラで拾って、自作isInputted()メソッドで2つの入力欄に文字が入っているかどうかを調べ、その結果によってログインボタンの有効化/無効化をしています。ユーザ名、パスワードの両方が入っていないとログインボタンが押せないようになっています。
<grid>
いわゆる表ですが、データパスのデータを表示するのが前提のコンポーネントです。
リスト11ではよく使う属性を全部使っています。<grid>については、shownitemsはデフォルト表示項目数、showvlinesは縦罫線の表示、showhlinesは横罫線の表示、bgcolor0とbgcolor1は偶数行と奇数行で色分け、といった属性をよく使います。
グリッド中で文字列を表示する<gridtext>については、textalignは文字列の位置指定、datatypeはデータタイプの指定。datatypeは数値データの場合numberに設定するとソートしたときに数値順に並びます。
<gridcolumn>は文字列だけでなく他のコンポーネントを含めることができます。リスト11では<view>を入れ、売上数値がそのまま幅になって、グラフになっています。売上数値をクリックして数値を変更するとグラフもリアルタイムで変わるので、試してみてください。
<list>
ボックス形式の選択肢リストコンポーネントです。コーディングは<combobox>に似ています。デフォルトではなにも選ばれていないのでvalue値はnullになります。
<tree>
ツリー形式にデータを表示するコンポーネントです。ツリー用のコンポーネントはすべて<tree>ですが、ファイルシステムでいうフォルダ/ファイルの区別をisleaf属性でします。isleaf="false"(デフォルト)にすると、フォルダのような形になります。
<menu>
アプリケーションのメニューバーのようなコンポーネントです。メニューの土台となるメニューバー<menubar>、プルダウンメニューを実現する<menu>、メニューの実体<menuitem>、区切り線<menuseparator>などのコンポーネントからなります。<window>の中に入れるとアプリらしくなりますので、試してみてください。<menuitem>はonselectでイベントを拾います。
<tabs>
タブのコンポーネントです。いちばん外側の入れ物である<tabs>と、そのなかのひとつひとつのタブ<tabpane>からなります。<tabpane>を追加していけば、その分タブが増えていきます。<tabpane>直下の文字列はタブのタイトルになります。デフォルトでは<tabs>のサイズは、一番大きい<tabpanes>のサイズに自動的に合わせられます。
<tabslider>
縦方向にアニメーションしながらスライドするタブスライダーです。ソースの構造的には<tabs>とそっくりです。いちばん外側の入れ物である<tabslider>と、その中のひとつひとつのタブ<tabelement>からなります。