Код (приложение 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()
, но не произошло ничего нового.