FXMLでアクションイベントを実装する (5/5)
作成:2014-12-13 11:36
更新:2014-12-17 07:53
更新:2014-12-17 07:53
■setOnActionでアクションイベントを実装する
コントローラーを使ったアクションイベントの実装は、とても簡単ですが、しかしFXML側にonActionを用意しておく必要があります。AWTやSwingでは、Javaのコード内でイベント処理を実装するのが基本でしたね。
先に、FXMLを使わず、Applicationクラスですべての処理を記述した場合では、「setOnAction」メソッドでアクションイベントを組み込むことができました。FXMLとコントローラーを利用する場合も、この点は同じです。ただし、setOnActionをするのがApplicationクラスではなく、コントローラー側になる、という点が違います。
では、これもやってみましょう。FXMLの<Button>タグから、onActio属性を削除してください。そしてコントローラークラスのソースコードを、下のリスト欄のように書き換えてみましょう。これでも、実行すればちゃんとボタンクリックで処理が実行されるようになります。
このサンプルでは、先程までのコントローラーとは微妙にクラスの定義が変わっていることに気がつくでしょう。javafx.fxmlの「Initializable」というインターフェイスがimplementsされていますね。これはFXMLの初期化処理に関する機能を付け加えるためのものです。
クラスには、initializeというメソッドが追加されています。ここに、FXML関連の初期化処理を記述します。これが呼びだ出される時点では、@FXMLアノテーションを付けたインスタンスフィールドにはインスタンスが代入されていますので、そのままButtonのsetOnActionを呼び出してアクションイベントを割り付けることができます。
とりあえず、これでFXMLベースでアクションイベントを実装できるようになりました。実際にいろいろと処理を動かしてみて、動作を確かめてみましょう。
先に、FXMLを使わず、Applicationクラスですべての処理を記述した場合では、「setOnAction」メソッドでアクションイベントを組み込むことができました。FXMLとコントローラーを利用する場合も、この点は同じです。ただし、setOnActionをするのがApplicationクラスではなく、コントローラー側になる、という点が違います。
では、これもやってみましょう。FXMLの<Button>タグから、onActio属性を削除してください。そしてコントローラークラスのソースコードを、下のリスト欄のように書き換えてみましょう。これでも、実行すればちゃんとボタンクリックで処理が実行されるようになります。
このサンプルでは、先程までのコントローラーとは微妙にクラスの定義が変わっていることに気がつくでしょう。javafx.fxmlの「Initializable」というインターフェイスがimplementsされていますね。これはFXMLの初期化処理に関する機能を付け加えるためのものです。
クラスには、initializeというメソッドが追加されています。ここに、FXML関連の初期化処理を記述します。これが呼びだ出される時点では、@FXMLアノテーションを付けたインスタンスフィールドにはインスタンスが代入されていますので、そのままButtonのsetOnActionを呼び出してアクションイベントを割り付けることができます。
とりあえず、これでFXMLベースでアクションイベントを実装できるようになりました。実際にいろいろと処理を動かしてみて、動作を確かめてみましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package com.tuyano.libro; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class AppController implements Initializable { @FXML Label label1; @FXML TextField field1; @FXML Button btn1; @Override public void initialize(URL location, ResourceBundle resources) { btn1.setOnAction((AtionEvent)->{ String str = field1.getText(); str = "あなたは、「" + str + "」と書いた。"; label1.setText(str); }); } }
※関連コンテンツ