, когда я вызываю представление, в котором используется индикатор прогресса или индикатор выполнения, событие onDock
запускается не в первый раз, а в следующие несколько раз, когда я вызываю окно. Я создал небольшую программу, чтобы проверить это. Я не знаю, правильно ли я вызываю представление, но с остальными элементами управления, которые я использовал, такая ситуация не возникает.
MainView:
package com.example.demo.view
import javafx.geometry.Pos
import tornadofx.*
import javafx.stage.Modality
import javafx.stage.StageStyle
class MainView : View("Hello TornadoFX") {
override val root = hbox {
alignment = Pos.CENTER
button("Show indicator") {
minWidth = 200.0
this.paddingAll = 5
action {
find(Test::class).openWindow(StageStyle.UTILITY,
Modality.APPLICATION_MODAL, true, null, true)
}
}
}
}
Тест:
package com.example.demo.view
import javafx.scene.control.ProgressIndicator
import kotlinx.coroutines.*
import tornadofx.*
class Test : View("My View") {
private var indicatorProgress: ProgressIndicator by singleAssign()
override val root = hbox {
indicatorProgress = progressindicator {
prefWidth = 100.0
prefHeight = 100.0
progress = 0.0
GlobalScope.launch(Dispatchers.IO) {
while (true) {
for (i in 1..10) {
progress = i.toDouble() / 10.0
delay(1000)
}
}
}
}
}
override fun onDock() {
super.onDock()
println("Entering view...")
}
override fun onUndock() {
super.onUndock()
println("Leaving view...")
}
}
Результат:
12:58:33: Executing task 'run'...
:wrapper
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
:discoverMainScriptsExtensions
:compileKotlin UP-TO-DATE
:compileJava NO-SOURCE
:processResources NO-SOURCE
:classes UP-TO-DATE
:run
Leaving view...
Entering view...
Leaving view...
Entering view...
Leaving view...
BUILD SUCCESSFUL in 18s
3 actionable tasks: 2 executed, 1 up-to-date
12:58:51: Task execution finished 'run'.
После: run должен сначала отображаться «Вход в вид ...», но событие onDock не выполняется.
Я неправильно называю окно?
Большое спасибо всем.