プロジェクト

全般

プロフィール

TornadoFXのHello world

Hello worldプログラムの構成

アプリケーションの入口となるAppを継承したMyAppクラスと、ノードの配置を定義するViewを継承したMyViewクラスを作成します。

空のウィンドウを表示する

  • MyApp.kt
    class MyApp : App(MyView::class)
    
  • MyView.kt
    class MyView : View() {
        override val root = VBox()
    }
    

rootプロパティをオーバーライドし、ルートノードとなるレイアウト部品を指定します。
このMyAppクラスを実行すると、空のウィンドウが表示されます。

ウィンドウのタイトルバーに文字を入れるには、Viewのコンストラクタに文字列を指定します。

  • MyView.kt
    - class MyView : View() {
    + class MyView : View("Hello TornadoFX") {
         override val root = VBox()
     }
    

JavaFXであれば、Application継承クラスでstartメソッドをオーバーライドして、StageクラスやSceneクラスの記述が必要です。

class MyApp : Application() {
    override fun start(primaryStage: Stage?) {
        val root = VBox()
        val scene = Scene(root)
        primaryStage?.scene = scene
        primaryStage?.title = "Hello Kotlin" 
        primaryStage?.show()
    }
}

ラベルとボタンを配置する

書き方(その1)

最初の書き方は、initブロックを使用してrootプロパティにコントロールを追加するものです。

  • MyView.kt
    class MyView : View("Hello TornadoFX") {
        override val root = VBox()
    
        init {
            root += Button("押してね")
            root += Label("待ってるよ")
        }
    }
    

書き方(その2)

ButtonとLabelを、生成関数を使ってインスタンス生成とrootプロパティへの追加を行います。

  • MyView.kt
    class MyView : View("Hello TornadoFX") {
        override val root = VBox()
    
        init {
            with(root) {
                button("押してね")
                label("待ってるよ")
            }
        }
    }
    

書き方(その3)

rootプロパティの定義に生成関数を使い、initブロックをなくした記述です。

  • MyView.kt
    class MyView : View("Hello TornadoFX") {
        override val root = vbox {
            button("押してね")
            label("待ってるよ")
        }
    }
    

ボタンとラベルに対して文字の色や大きさの設定は、ラムダ式で行えます。

  • MyView.kt
    class MyView : View("Hello TornadoFX") {
        override val root = vbox {
            button("押してね") {
                textFill = Color.MAGENTA
                action {
                    println("ボタンが押されたよ")
                }
            }
            label("待ってるよ") {
                textFill = Color.BLUE
            }
        }
    }