プロパティのイベント処理について (1/4)
作成:2015-01-10 10:58
更新:2015-01-10 10:58
更新:2015-01-10 10:58
■ToggleGroupのChangeListener処理
前回、ListeViewについて、選択状態が変更された際のイベント処理を作成しました。これは、選択状態を管理するプロパティにイベントリスナーを組み込みましたね。
こうした「プロパティが変更された時にChangeListenerでイベント処理をする」というやり方は、JavaFXのコントロールの基本的なイベント処理の仕組みなのです。この基本的な考え方がわかれば、その他のコントロール類でも同じようなやり方でイベント処理を組み込むことができます。
まずは、「ラジオボタンを操作した際のイベント処理」から考えてみましょう。ラジオボタンは、ToggleGroupというグループ管理クラスを使って複数のラジオボタンをひとまとめに管理していました。ラジオボタンが選択されると、このToggleGroupにある、選択状態を示すプロパティの値が変更されます。
このプロパティは「selectedToggleProperty」というもので、ReadOnlyObjectPropertyクラスのインスタンスが設定されています。これに「addListener」でChangeListenerを組み込むことで、選択が変更された際の処理が行えるようになります。
では、実際に簡単なサンプルを作ってみましょう。まず、FXMLでラジオボタンを用意します。下のような形で、ToggleGroupを組み込んだ2つのラジオボタンを用意してみました。ここでは、「userData」という属性が用意されていますね。これは、ラジオボタンに独自のデータを持たせるためのもので、後で利用しますから用意しておいて下さい。それ以外は、特に何も特殊なことはしていない、普通のラジオボタンの組み込みですね。
こうした「プロパティが変更された時にChangeListenerでイベント処理をする」というやり方は、JavaFXのコントロールの基本的なイベント処理の仕組みなのです。この基本的な考え方がわかれば、その他のコントロール類でも同じようなやり方でイベント処理を組み込むことができます。
まずは、「ラジオボタンを操作した際のイベント処理」から考えてみましょう。ラジオボタンは、ToggleGroupというグループ管理クラスを使って複数のラジオボタンをひとまとめに管理していました。ラジオボタンが選択されると、このToggleGroupにある、選択状態を示すプロパティの値が変更されます。
このプロパティは「selectedToggleProperty」というもので、ReadOnlyObjectPropertyクラスのインスタンスが設定されています。これに「addListener」でChangeListenerを組み込むことで、選択が変更された際の処理が行えるようになります。
では、実際に簡単なサンプルを作ってみましょう。まず、FXMLでラジオボタンを用意します。下のような形で、ToggleGroupを組み込んだ2つのラジオボタンを用意してみました。ここでは、「userData」という属性が用意されていますね。これは、ラジオボタンに独自のデータを持たせるためのもので、後で利用しますから用意しておいて下さい。それ以外は、特に何も特殊なことはしていない、普通のラジオボタンの組み込みですね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>
<?import java.lang.*?>
<?import java.net.URL ?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.collections.FXCollections?>
<?import javafx.scene.layout.*?>
<BorderPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.tuyano.libro.AppController">
<stylesheets>
<URL value="@app.css" />
</stylesheets>
<top>
<Label fx:id="label1" text="This is FXML!" />
</top>
<center>
<VBox>
<fx:define>
<ToggleGroup fx:id="group1" />
</fx:define>
<RadioButton text="Male" toggleGroup="$group1" userData="男である" selected="true" />
<RadioButton text="Female" toggleGroup="$group1" userData="女ですの"/>
</VBox>
</center>
<bottom>
</bottom>
</BorderPane>
※関連コンテンツ