tornadofx EventBus使用tableview对象扩展表行

时间:2016-12-26 09:10:03

标签: javafx kotlin tornadofx

背景:
假设我在视图中有单个表的多个片段,每个片段都有一个rowExpander。

预期行为:
如果在一个表格片段中我展开了一行,那么同一个索引行的其他片段应该展开。同样的崩溃

我的进步:
样本片段:

tableview(dataset) {
                column("First Name", Person::firstNameProperty)
                column("Last Name", Person::lastNameProperty)
                rowExpander(true) {
                    selectedData.item?.apply {
                        fire(ExpandDataEvent(dataset.indexOf(this)))
                    }
                    column("Mobile Nos.", Person::mobileNumProperty)
                    column("Email Ids", Person::emailIdProperty)
                }
                bindSelected(selectedData)
                subscribe<ExpandDataEvent> { event ->
                    selectionModel.select(event.index)
                }
            }

活动类:

class ExpandDataEvent(val index: Int) : FXEvent()

我从“subscribe”中理解的是,当一个事件被触发时它会被调用(目前,只要用户通过双击/单击加号展开行,我就会触发事件);由于订阅放在tableview中,因此会调用所有存在的表碎片(这就是我想要的)。但是在subscribe方法中,我正在做一个selectionModel.select(event.index),它只选择相应的索引行。我想扩展行(最好使用selectionModel)

问题2:
是否可以删除加号列?对于rowExpand,如果我将expandOnDoubleClick设置为true,我不希望在tableview中加号列。

1 个答案:

答案 0 :(得分:2)

rowExpander构建器返回实际的ExpanderColumn,这基本上是正常TableColumn。保存对扩展器的引用,以便以后可以对其进行操作:

val expander = rowExpander(true) { ... }

在下面,您现在可以隐藏扩展器列:

expander.isVisible = false

现在,从事件订阅者切换特定行的展开状态也很容易:

subscribe<ExpandDataEvent> { event ->
    expander.toggleExpanded(event.index)
    selectionModel.select(event.index)
}

您可能需要仔细检查是否要为触发事件的tableview切换扩展器,因此请考虑在事件中包含事件源并区分订阅者中的事件源。

我将研究是否可以在rowExpander构建器函数中添加一个可见的布尔参数,这样您就不需要手动调用isVisible了。)