Java TablewView设置所有支持列表重置选择,但不重置焦点

Java TablewView设置所有支持列表重置选择,但不重置焦点,java,javafx,tableview,Java,Javafx,Tableview,我正在开发一个类似于任务管理器的应用程序,在这个应用程序中,TableView的所有支持列表都会被周期性运行命令行程序的结果所取代。我正在使用setAll将表视图设置为最新的项。它可以工作,但会重置视图中的选择 有趣的是,蓝色的焦点栏没有移动,但是在使用setAll更新后,表视图的第一项上显示了一个非常小的轮廓。我想这就是所选索引的呈现方式。当我使用箭头键导航时,选择将定期跳回列表的第一项 有人知道如何解决这个问题吗?我找到了一种方法,但我相信还有更好的方法。我手动计算新状态和以前状态之间的差异

我正在开发一个类似于任务管理器的应用程序,在这个应用程序中,TableView的所有支持列表都会被周期性运行命令行程序的结果所取代。我正在使用setAll将表视图设置为最新的项。它可以工作,但会重置视图中的选择

有趣的是,蓝色的焦点栏没有移动,但是在使用setAll更新后,表视图的第一项上显示了一个非常小的轮廓。我想这就是所选索引的呈现方式。当我使用箭头键导航时,选择将定期跳回列表的第一项


有人知道如何解决这个问题吗?

我找到了一种方法,但我相信还有更好的方法。我手动计算新状态和以前状态之间的差异。然后我分别调用removeAll和addAll方法:

object PortBindingLock

private fun reloadBindings() {
    synchronized(PortBindingLock) {
        val previous = this.portBindings.toSet()
        val current = processService.processPortBindings().toSet()
        val toRemove = Sets.difference(previous, current)
        val toAdd = Sets.difference(current, previous)
        this.portBindings.removeAll(toRemove)
        this.portBindings.addAll(toAdd)
    }

}

如果重置完整的数据,您希望得到什么?清除选择似乎是正确的。您的选项:a跟踪所选索引,监听数据更改,如果检测到setAll,则重新选择旧索引b不使用setAll。。。哦,只是看到你的编辑,所以你已经选择了b;谢谢你的回复!新版本可以工作,但我仍然想知道为什么使用setAll会重置选择,而不是焦点。我希望两者都能重新设置。如果我可以将选择配置为当前焦点的行为,我的问题也会得到解决。好的。顺便说一句:我试着实现选项a,但没能让它工作。我认为可能涉及到一些并发性问题。我会得到带有stacktraces的IndexOutOfBounds异常,stacktraces中没有我自己的任何代码。然后坚持选项b,它本身没有什么不好的地方,如果它起作用:添加到我的注释中:看起来tableView选择的行为与您预期的一样。如果仍然包含selectedItem,它似乎会保留它,fx11,而列表选择仍然具有不稳定的行为。顺便说一句:对于所有具有selectionModel的控件,围绕selection/focus/anchor仍然存在大量的bug。。。多年来有所改善,谢谢。我用的是Java8,也许我会试试11。现在我将坚持选择b,然后: