libro
初心者のためのJavaFXプログラミング入門

FXMLでアクションイベントを実装する (3/5)

作成: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のタグを見ると、
<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のアクションイベント処理に設定されます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

*program list*

<?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>

※関連コンテンツ

 

「初心者のためのJavaFXプログラミング入門」に戻る