问题是关于使用 Kotlin UI DSL 进行插件开发 (https://plugins.jetbrains.com/docs/intellij/kotlin-ui-dsl-version-2.html)
例如我有面板
panel {
list.forEach { item ->
row {
label(item)
}
}
}
我想添加一个按钮,将项目添加到列表中。怎么做呢?如何向面板添加行?从头开始重新创建它?
要在 Kotlin UI DSL 中动态添加行,您需要在列表更改时重新创建面板的内容:
val list = mutableListOf("Item 1", "Item 2")
panel {
val parentPanel = this
fun refreshRows() {
parentPanel.removeAll()
list.forEach { item ->
row { label(item) }
}
parentPanel.revalidate()
parentPanel.repaint()
}
refreshRows()
row {
button("Add Item") {
actionListener {
list.add("Item ${list.size + 1}")
refreshRows()
}
}
}
}
工作原理:
removeAll()
清除现有行。list
重新创建行。revalidate()
和 repaint()
来更新 UI。