プログラムの記述
UIができましたので次にプログラムを書いていきましょう.
コントローラクラス名の設定
まずはコントローラクラス名を設定します.作成したUIをJavaで動作させる時,ここで設定したコントローラクラスをmainメソッドから呼び出して使う流れになっています.今回はRPiCarControllerという名前を付けます.下の図をご覧ください.画面左側にあるドキュメントの下にコントローラというタブがあります.ツリー構造の下側にあるため,小さくなっている可能性がありますので注意してください.このコントローラを開くと,中にController classを記述するところがあります.ここにコントローラクラス名を書きます.この例ではjp.ac.nagano_nct.ashida_labパッケージの下にあるため,jp.ac.nagano_nct.ashida_lab.RPiCarControllerとなっています.

イベントの記述
例えばボタンが押されたらライトを点灯するなどのように,「何かが発生」したら「何かを行う」,のような手順でプログラムで書いていきます.ここで,「何かが発生」と説明したものをイベント,「何かを行う」メソッドをイベントハンドラといいます.イベントにはいろいろなものがあります.例えば,そのコンポーネント上でマウスが動いたとか,キーが押されたとか,配置が換わったとかのように多種多様です.ただし,ButtonやToggleButtonの場合には「ボタンが押された」というような最も標準的なイベントがあり,これをOnActionと呼んでいます.
下の図はヘッドライトのToggleButtonが押されたときに行ってほしいメソッドを書く場所を表しています.右側にあるCodeの中にOnActionというところがあります.ここに行ってほしいメソッドを書くことでToggleButtonが押されたときにこのメソッドを呼び出してくれるようになります.この例では,handleButtonActionメソッドが呼び出されるようになります.

まだイベントを取り扱うべきすべてのコンポーネントについて,上記のようなイベントハンドラを書いていませんが,ここで仮にプログラムを生成してみましょう.下の図のように表示メニューにあるサンプル・コントローラ・スケルトンの表示を選択してみましょう.

上記の結果,下に示すJavaのスケルトンコードが生成されます.先ほど名付けたコンポーネントとともにイベントハンドラであるhandleButtonActionメソッドがあります.あとはこの生成されたJavaのプログラムをIntelliJなどのIDEにもっていくとともに,handleButtonActionに行いたい処理,この場合にはヘッドライトを点灯する処理を書いてあげればよいのです.
package jp.ac.nagano_nct.ashida_lab;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.ToggleButton;
import javafx.scene.image.ImageView;
import javafx.scene.shape.Circle;
public class RPiCarController {
@FXML
private Circle centerPhotoReflectorCircle;
@FXML
private Label distanceLabel;
@FXML
private ToggleButton goBackToggleButton;
@FXML
private ToggleButton goForwardToggleButton;
@FXML
private ToggleButton headLightToggleButton;
@FXML
private Button hornButton;
@FXML
private Circle leftPhotoReflectorCircle;
@FXML
private Label leftSpeedLabel;
@FXML
private Slider leftSpeedSlider;
@FXML
private ImageView pictureImageView;
@FXML
private Circle rightPhotoReflectorCircle;
@FXML
private Label rightSpeedLabel;
@FXML
private Slider rightSpeedSlider;
@FXML
private ToggleButton rotateLeftToggleButton;
@FXML
private ToggleButton rotateRightToggleButton;
@FXML
private Button stopButton;
@FXML
private CheckBox synchronizeMotorCheckBox;
@FXML
private Button takePictureButton;
@FXML
void handlHeadLightToggleButtonAction(ActionEvent event) {
}
}
そのほかのイベントハンドラを設定していきましょう.Slider以外についてはすべてOn Actionにイベントハンドラを追記してください.下の表は以前示しましたコンポーネントの番号とメソッドをまとめたものです.
| 番号 | イベントハンドラの場所 | メソッド |
| 6 | On Action | handleHornButtonAction |
| 7 | On Action | handleTakePictureButtonAction |
| 8 | On Action | handleHeadLightToggleButtonAction |
| 10 | ||
| 12 | ||
| 13 | On Action | handleGoForwardToggleButtonAction |
| 14 | On Action | handleRotateLeftToggleButtonAction |
| 15 | On Action | handleRotateRightToggleButtonAction |
| 16 | On Action | handleGoBackToggleButtonAction |
| 17 | On Action | handleStopButtonAction |
| 18 | On Action | handleSynchronizeMotorCheckBoxAction |
