JavaFX:FXMLで書いたコントロールをJava側から制御する方法
前回、FXMLで作ったUIのイベント処理する方法について書きました。
この時つくったやつは、OKボタンを押すとコンソールに「OK」と表示されます。
今度は、OKボタンを押したら、「Hello World」と書かれたLabelコントロールに「OK」と書き換えるようにしたいと思います。
前回との違いは、FXMLで記述したコントロールをJava側からどう制御するか?といった点です。Java側でFXMLコントロールをどう認識するかがポイントです。
[ad#top-1]
まずは実行例
OKボタンを押すと、Labelに書かれた「Hello World」が「OK」に切り替わるという単純なプログラムです。
イベント処理はもちろんJava側で行います。どうやってLabelコントロールを制御するかがポイントです。
FXML側の処理
まずは、FXML側の処理を行います。
今までだと各コントロールを認識する固有のIDがないため、それを設定します。
Scene Builderで、Labelコントロールを選択した上で、の右サイドの「Code」メニューから、「fxid」のところに固有の名称を書きます。今回は「label」としました。
FXMLファイルをエディタで確認してみると、Labelタグのところに「fx:id=”label”」が追加されていることがわかります。
Java側の処理
次にJava側の処理です。
前回のプログラムから追加されたところにコメントで「追加」と明示しておきました。
import javafx.application.Application;
import javafx.fxml.*;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.AnchorPane;
import javafx.event.ActionEvent;
import javafx.scene.control.*; //追加
public class Hello extends Application {
@FXML private Label label; //追加
@Override
public void start(Stage primaryStage) throws Exception{
AnchorPane root = FXMLLoader.load(getClass().getResource("Hello.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 400, 100));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
@FXML
public void clickBtn(ActionEvent e) {
System.out.println("OK");
label.setText("OK"); //追加
}
}
ポイントは10行目の「@FXML private Label label;」という部分です。ここの「label」というインスタンス名は、先ほどFXMLで設定した「fxid」名と同じにする必要があります。
これで、FXMLのLabelコントロールが、Java側でlabelとして使用できるわけです。あとはLabelクラスの機能が使えます。
注意すべきはfxidの名称を重複させないことです。前に書いた通り、FXML上のミスはコンパイル時に発見できないので、エラーを探すのに難航しますので。
[ad#ad-1]
スポンサーリンク




