LoginSignup
1
0

More than 5 years have passed since last update.

TornadeFXでメインのウインドウを閉じたり閉じたときの処理を実装する

Posted at

tornadoFXで出てくるメインウィンドウを閉じいたときの処理で詰まったのでメモ

方法

primaryStageのclose()[閉じるとき]やsetOnCloseRequest()またはshowingProperty().addListener()[閉じる処理を書くとき]を呼ぶ

Main.kt

import tornadofx.*
class Main:App(MyView::class)

class MyView :View() {
    override val root = Form()
    val textfield = textfield ("hello world")
    init{
        with(root){
            fieldset{
                textfield
                //閉じるボタン
                button { action { primaryStage.close() } }
            }
        }
        //プログラム上から閉じたらこっちは呼ばれない
        //primaryStage.setOnCloseRequest { e -> println("close")}
        //こっちだとプログラム上で消しても呼ばれる
        primaryStage.showingProperty().addListener {obs,oldValue,newValue->
            if (oldValue == true && newValue == false) {
                println("close")
            }
        }
    }
}

説明

Appのコンストラクタで指定してるのはJavaFXでいうところのStageに乗せるSceneなので、指定してるViewでcloseしても意味がない。Viewが載っているStageにprimaryStageでアクセスできるので、それのclose()を呼べば閉じる。

消したときの処理も同様。ただし、onCloseRequestはプログラム上からcloseしたときは反応しない(ウインドウ上のXボタンを押したときのみ)ので、このページで言われているようにshowingProperty()を使ったほうがいい。

あとがき

javaFXとの対応関係が解れば当たり前の話だったけど、main周りがかなり違って対応関係が解らずかなり詰まった。

参考

1
0
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
1
0