Я искал предложения по автозаполнению документов и IDE и не могу понять это. Самое близкое, что я нашел, это onDelete (), и он работает не так, как я себе представляю.

Мне просто нужен способ запустить некоторый код очистки, когда представление закрыто.

Вот неудачная попытка использовать простой пример из документации.

import tornadofx.*

class MyApp: App(MyView::class)

class MyView: View() {
    // this does not print when the window is closed
    override fun onDelete() {
        super.onDelete()
        println("Print on close!")
    }
    override val root = vbox {
        button("Press me")
        label("Waiting")
    }
}

fun main(args: Array<String>) {
    launch<MyApp>(args)
}

Еще одна неудачная попытка в соответствии с предложением ниже:

import tornadofx.*

class MyApp: App(MyView::class)

class MyView: View() {
    // "Closing" is never printed when closing this view"
    override fun onDock() {
        currentWindow?.onHidingProperty()?.onChangeOnce {
            println("Closing")
        }
    }
    override val root = vbox {
        button("Press me")
        label("Waiting")
    }
}

fun main(args: Array<String>) {
    launch<MyApp>(args)
}
1
ryn1x 15 Авг 2019 в 02:23

2 ответа

Лучший ответ

Я использую это в своем проекте прямо сейчас. setOnCloseRequest мой путь!

override fun onDock() {
    currentWindow?.setOnCloseRequest {
        println("Closing")
    }
}
1
JCamacho 16 Авг 2019 в 15:51

onDelete является обратным вызовом для Workspace в TornadoFX и будет вызываться, если вы нажмете кнопку Delete в рабочей области, когда этот вид активен. То, что вы можете сделать, это переопределить onDock и добавить прослушиватель, который будет один раз изменен, в свойство скрытия:

override fun onDock() {
    currentWindow?.onHidingProperty()?.onChangeOnce {
        println("Closing")
    }
}
0
Edvin Syse 15 Авг 2019 в 08:25