FXMLでアクションイベントを実装する (3/5)
作成:2014-12-13 11:31
更新:2014-12-13 11:31
更新:2014-12-13 11:31
■FXMLでコントローラーを使う
JavaScriptは手軽で便利ですが、やっぱり具体的な処理はJavaで書きたい、という人も当然多いでしょう。そうした場合は、Javaのクラスとして処理を定義しておき、それをFXMLのコントロールに割り付けることもできます。
こうした「具体的なイベント処理を実装したクラス」は、一般にコントローラーと呼ばれます。コントローラーのクラスは、基本的にはPOJO(Pure Old Java Object)であり、何のクラスも継承していないシンプルなクラスとして定義します。
コントローラーは、FXMLのPaneクラスに「fx:controller」という属性として指定をします。これにより、そのクラスがコントローラーとして設定され、そのクラス内にあるメソッドをそのままdoActionなどのイベント処理用の属性に指定できるようになります。
では、やってみましょう。まずはFXMLの書き換えからです。app.fxmlを下のリスト欄のように書き換えて下さい。今回は、AppControllerというコントローラークラスを作って利用する形にしてあります。Paneのタグを見ると、
このように記述していますね? fx:controller="com.tuyano.libro.AppController"により、このAppControllerクラスがコントローラーとして指定されます。
また<Button>タグを見ると、onActionの記述が微妙に変わっていることに気がつきます。
コントローラーのメソッドは、「#メソッド名」という形で指定します。これにより、AppControllerクラスのdoActionメソッドが、このButtonのアクションイベント処理に設定されます。
こうした「具体的なイベント処理を実装したクラス」は、一般にコントローラーと呼ばれます。コントローラーのクラスは、基本的にはPOJO(Pure Old Java Object)であり、何のクラスも継承していないシンプルなクラスとして定義します。
コントローラーは、FXMLのPaneクラスに「fx:controller」という属性として指定をします。これにより、そのクラスがコントローラーとして設定され、そのクラス内にあるメソッドをそのままdoActionなどのイベント処理用の属性に指定できるようになります。
では、やってみましょう。まずはFXMLの書き換えからです。app.fxmlを下のリスト欄のように書き換えて下さい。今回は、AppControllerというコントローラークラスを作って利用する形にしてあります。Paneのタグを見ると、
<BorderPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.tuyano.libro.AppController">
このように記述していますね? fx:controller="com.tuyano.libro.AppController"により、このAppControllerクラスがコントローラーとして指定されます。
また<Button>タグを見ると、onActionの記述が微妙に変わっていることに気がつきます。
<Button onAction="#doAction" text="Click" />
コントローラーのメソッドは、「#メソッド名」という形で指定します。これにより、AppControllerクラスのdoActionメソッドが、このButtonのアクションイベント処理に設定されます。
(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.*?> <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> <TextField fx:id="field1" /> </center> <bottom> <Button fx:id="btn1" onAction="#doAction" text="Click" /> </bottom> </BorderPane>
※関連コンテンツ