В настоящее время я переношу приложение JavaFx в TornadoFx. Я хотел бы добавить диаграмму по нажатию кнопки. В итоге я получил следующий урезанный код:
borderpane {
prefWidth = 1000.0
prefHeight = 750.0
padding = insets(10)
top = vbox {
spacing = 5.0
hbox {
spacing = 5.0
alignment = Pos.CENTER_LEFT
button("Show") {
action {
val centerRef = [email protected] as VBox
println(centerRef.id)
if (centerRef.children.size > 0)
centerRef.children.removeAll(centerRef.children)
val seriesData = (1..25)
.map { Random().nextDouble() }
.zip((1..25).map { Random().nextDouble() })
.toMap()
centerRef.add(linechart("My Chart", NumberAxis(), NumberAxis()) {
series("my series") {
for ((k,v) in seriesData) {
data(k, v)
}
}
})
}
}
}
separator()
}
center = vbox { id = "centervbox" }
}
К сожалению, как только событие запускается, размер кнопки изменяется. Я пытался установить максимальную ширину и высоту кнопок, но настройки игнорируются. Я новичок в Kotlin и TornadoFx (хотя есть некоторый опыт работы с JavaFx) и очень ценю любые предложения.
Заранее спасибо и с уважением.
Редактировать: я получаю такое же странное поведение с этим кодом, то есть первая диаграмма помещается внутри кнопки. Только после второго щелчка диаграмма корректно добавляется в VBox.
vbox {
prefWidth = 1000.0
prefHeight = 750.0
id = "rootvbox"
button("button1") {
action {
val vbRef = this@vbox
println(vbRef.id)
val lc = linechart("My Chart", NumberAxis(), NumberAxis()) {
series("my series") {
for ((k,v) in (1..25).map { Random().nextDouble() }.zip((1..25).map { Random().nextDouble() }).toMap()) {
data(k, v)
}
}
}
vbRef.children.add(lc)
}
}