フォームとバリデーション
1つの入力フィールドを用意する程度ならば、比較的処理も簡単ですが、複数の入力項目があるような場合、全体をまとめて扱うことができるとずいぶんと助かります。こうした場合に用意されているのが「フォーム」です。これは「Form」というクラスとして用意されています。
また、入力を行う際、どのような値が入力されたのかをチェックする「バリデーション」も重要です。これもPivotにクラスとして用意されています。では、フォームを使って入力項目を整理し、それぞれにバリデーションの機能を追加した、より複雑な入力を行ってみることにしましょう。
まず、WTKXファイルの修正からです。今回はフォームを設置し、その中に2つの入力フィールド、1つのチェックボックス、2個を切り替えるラジオボタンを用意してみます。
<Window title="Sample" maximized="true"
xmlns:wtkx="http://pivot.apache.org/wtkx"
xmlns="org.apache.pivot.wtk">
<content>
<BoxPane orientation="vertical">
<Label
wtkx:id="label"
styles="{font:'bold 18', color:'#0000FF'}"
text="フォームの利用:" />
<Form wtkx:id="form1">
<sections>
<Form.Section>
<Label wtkx:id="error" />
</Form.Section>
<Form.Section heading="Number Data">
<BoxPane wtkx:id="numpane"
Form.label="Number"
orientation="horizontal">
<TextInput
wtkx:id="number1" prompt="数値"
styles="{font:'Serif plain 14'}" />
</BoxPane>
</Form.Section>
<Form.Section heading="String Data">
<BoxPane wtkx:id="textpane"
Form.label="String"
orientation="horizontal">
<TextInput
wtkx:id="text1" prompt="テキスト"
styles="{font:'Serif plain 14'}" />
</BoxPane>
</Form.Section>
<Form.Section heading="Check Box">
<BoxPane wtkx:id="checkpane"
Form.label="Check"
orientation="horizontal">
<Checkbox buttonData="チェック!"
wtkx:id="check1"
styles="{font:'Serif plain 14'}" />
</BoxPane>
</Form.Section>
<Form.Section heading="Radio Button">
<BoxPane wtkx:id="radiopane"
Form.label="Radio"
orientation="horizontal">
<wtkx:define>
<ButtonGroup wtkx:id="group1"/>
</wtkx:define>
<RadioButton buttonData="Male" selected="true"
wtkx:id="radio1" buttonGroup="$group1"
styles="{font:'Serif plain 14'}" />
<RadioButton buttonData="Female"
wtkx:id="radio2" buttonGroup="$group1"
styles="{font:'Serif plain 14'}" />
</BoxPane>
</Form.Section>
</sections>
</Form>
<PushButton
wtkx:id="button1" buttonData="OK!" />
</BoxPane>
</content>
</Window>
今回は、だいぶ新しいタグが増え、構成も複雑になっています。特にフォームの構成についてざっと整理しておきましょう。フォームは、整理すると次のような形で記述されています。
<Form>
<Form.Section>
……コンポーネント・タグ……
</Form.Section>
<Form.Section>
……コンポーネント・タグ……
</Form.Section>
……以下略……
</Form>
フォームは、<Form>というタグを使って記述します。この中にコンポーネントを記述すれば、それでフォームが作成できます。今回はこれに加え、「フォームセクション」というものも利用しています。これは、フォームの中に組み込まれるコンポーネント類を必要に応じてまとめ整理するためのものです。<Form.Section>を使ってコンポーネントをまとめることで、より見やすく整理された形でレイアウトすることができます。
また、今回は新しいコンポーネントも登場しています。Checkbox、RadioButton、そしてButtonGroupといったものです。これらについてもざっと整理しておきましょう。
| コンポーネント | 説明 |
| <Checkbox> | チェックボックス「Checkbox」クラスのタグです。 |
| <RadioButton> | ラジボタン「RadioButton」クラスのタグです。これは、そのままではグループ化されません。「buttonGroup」属性に、次のButtonGroupを設定することでグループ化されます。 |
| <ButtonGroup> | 複数のボタンを1つのグループとして扱うためのものです。buttonGroupに同じButtonGroupを設定すると、それらのボタンは常に1つだけが選択されるようになります。 |
注意したいのは、<ButtonGroup>です。これはユーザーが操作するコンポーネントとは異なりますので、そのまま<Form>内に記述するのではなく、<wtkx:define>というタグの中に記述をします。これは、画面に表示されないオブジェクトを定義するための専用タグです。
