2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コントローラーとFXMLの紐づけと初期化方法

Last updated at Posted at 2018-08-19

はじめに

Kotlin + JavaFXでGUIアプリ開発に挑戦したので、コントローラーとFXMLを紐づける方法をメモ代わりに残します。

実装方法

コントローラーのクラスを作成してfxml側で指定すると紐付けできます。

MainController.kt
class MainController : Application() {
    override fun start(primaryStage: Stage?) {
        ....
    }
}
main.fxml
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            prefHeight="400.0"
            prefWidth="600.0"
            fx:Controller="MainController">
</AnchorPane>

紐づけたコントローラーを初期化する

コントローラーの初期化方法はこちらを参考にしました。

最近のバージョンではinitialize()メソッドをコントローラー内に記述することで初期化できるみたいです。

fun initialize() { .... }

// または

@FXML private fun initialize() { .... }

ちなみにコントローラーが初期化されると、fxml内でfx:idで指定したノードと同じ変数名を持つフィールド変数が初期化されます。
ただし、start()より後に呼ばれるため、lateinit varで宣言している状態でstart()の中で変数を使用すると初期化されていないので失敗します。

また、initialize()は継承する親クラスで宣言していても紐づけたコントローラーが初期化されるので、
BaseControllerクラスを用意して継承させるとかでもいいのかなと思いました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?