【问题标题】:JavaFX TreeTableView unable to update cell valuesJavaFX TreeTableView 无法更新单元格值
【发布时间】:2019-07-31 19:39:02
【问题描述】:

代码(JavaFX 应用程序,kotlin):

class TempController {
    @FXML
    private lateinit var treeTable: TreeTableView<SkillTableDAO>
    @FXML
    private lateinit var colValue: TreeTableColumn<SkillTableDAO, String>

    private val skillTree: MutableMap<Long, TreeItem<SkillTableDAO>> = ConcurrentHashMap()

    @Suppress("unused")
    fun initialize() {
        colValue.setCellValueFactory {
            ReadOnlyStringWrapper(it.value.value.getValue())
        }

        val treeRoot = TreeItem<SkillTableDAO>(null).apply { isExpanded = true }
        treeTable.isShowRoot = false
        treeTable.root = treeRoot

        Pck_CmdSetSkill.listen { packet ->
            Platform.runLater {
                var node = skillTree[packet.id]
                if (node != null) {
                    node.value.onPacket(packet)
                    // Packets goning unordered, so try to find parent
                    if ((node.parent == treeRoot || node.parent.value.id != node.value.parentId) && skillTree.containsKey(packet.parentId)) {
                        node.parent.children.remove(node)
                        skillTree[packet.parentId]!!.children.add(node)
                    }
                } else {
                    node = TreeItem(SkillTableDAO(packet))
                    skillTree[packet.id] = node
                    (skillTree[packet.parentId] ?: treeRoot).children.add(node)
                }
            }
        }

    }

    @Suppress("unused")
    class SkillTableDAO(packet: Pck_CmdSetSkill.Packet) {
        val id: Long = packet.id
        val parentId: Long = packet.parentId

        var value: Float = packet.value

        fun onPacket(packet: Pck_CmdSetSkill.Packet): SkillTableDAO {
            this.value = packet.value
            return this
        }

        fun getValue() = value.toString()
    }
}

当我更改对象的值时(发生Pck_CmdSetSkill.listen 时),单元格的值保持其原始状态。我究竟做错了什么? 我尝试了一些可观察的变体,但失败了......我也尝试过it.value.value.value.toString(),但没有发生新的事情。

【问题讨论】:

    标签: java javafx kotlin data-binding


    【解决方案1】:

    Pck_CmdSetSkill 仅被称为初始,另一个地方的错误代码 =(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多