グループボタンの利用
では、その他のコンポーネントも使ってみましょう。GUI関係の中でもっともよく用いられるのは、チェックボックスとラジオボタンでしょう。
チェックボックスは、単に「CheckBox」コンポーネントを配置するだけです。選択されているかどうかは、この「selected」アトリビュート(真偽値)の値をチェックすればわかります。これは、実際に使ってみればすぐに利用の仕方はわかってくるでしょう。
問題は、ラジオボタンです。ラジオボタンは、いくつかのボタンをグループ化して機能しなければいけません。Swingの場合、ボタングループを管理する専用クラスが用意されていましたね。JavaFXでもこれは同じです。「ToggleGroup」というクラスを利用し、グループに加えるコンポーネントの「toggleGroup」アトリビュートにこれを登録します。ラジオボタンに限らず、複数のボタンをグループ化して利用できるコンポーネントには、すべてこのアトリビュートがついています。(逆にいえば、これがないものはグループ化して利用できません)
package javafxapp;
import javafx.ext.swing.*;
import javafx.scene.*;
import javafx.scene.paint.*;
SwingFrame {
var label:Label;
var radio1:RadioButton;
var radio2:RadioButton;
var group = ToggleGroup {};
title: "MyApplication"
width: 200
height: 120
closeAction: function() {
java.lang.System.exit(0);
}
visible: true
menus: []
content: BorderPanel {
top: label = Label {
text: "please type!"
font: Font {
name: "Serif"
size: 16
style: FontStyle.BOLD
}
foreground: Color.DARKBLUE
}
center: GridPanel {
rows: 2
columns: 1
content: [
RadioButton {
text: "Male"
toggleGroup: group
selected: true
},
RadioButton {
text: "Fimale"
toggleGroup: group
}
]
}
bottom: Button {
text: "Click"
action: function(){
label.text = "you typed '{group.getSelection().text}'!";
}
}
}
}
ラジオボタンをクリックすると自動的に切り替わる。プッシュボタンを押すと、選択したボタン名が表示される。 |
ここでは、2つのラジオボタンをグループ化してみました。RadioButtonのアトリビュートを見ると、「toggleGroup」に、あらかじめ変数に用意しておいたToggleGroupが設定されているのがわかりますね。また1つ目のボタンでは、「selected」というアトリビュートが設定されています。
また、ボタンのactionでは、ToggleGroupの「getSelection」というものを使って、選択されているボタンを調べ、そのtextを取り出しています。このgetSelectionは、グループ化できるボタン類のスーパークラスであるSelectableButtonというクラスのインスタンスが保管されています。そこからtextなどの値を取り出して、選択されたボタンに関する情報を得ることができます。