Kotlin UI DSL - 如何修改行?

问题描述 投票:0回答:1

问题是关于使用 Kotlin UI DSL 进行插件开发 (https://plugins.jetbrains.com/docs/intellij/kotlin-ui-dsl-version-2.html)

例如我有面板

panel {
  list.forEach { item ->
    row {
      label(item)
    }
  }
}

我想添加一个按钮,将项目添加到列表中。怎么做呢?如何向面板添加行?从头开始重新创建它?

kotlin user-interface dsl intellij-plugin
1个回答
0
投票

要在 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()
            }
        }
    }
}

工作原理:

  1. 使用
    removeAll()
    清除现有行。
  2. 根据更新的
    list
    重新创建行。
  3. 调用
    revalidate()
    repaint()
    来更新 UI。
© www.soinside.com 2019 - 2024. All rights reserved.