プログラムの記述

UIができましたので次にプログラムを書いていきましょう.

コントローラクラス名の設定

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

70

イベントの記述

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

下の図はヘッドライトのToggleButtonが押されたときに行ってほしいメソッドを書く場所を表しています.右側にあるCodeの中にOnActionというところがあります.ここに行ってほしいメソッドを書くことでToggleButtonが押されたときにこのメソッドを呼び出してくれるようになります.この例では,handleButtonActionメソッドが呼び出されるようになります.

68

 

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

69

 

上記の結果,下に示す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