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 } } }