Layout JavaFX-8:自定义布局和布局过程(布局过程/css过程):我应该在哪里添加子节点?

Layout JavaFX-8:自定义布局和布局过程(布局过程/css过程):我应该在哪里添加子节点?,layout,javafx,custom-controls,Layout,Javafx,Custom Controls,我正在为非常大和非常自定义的内容开发一个自定义表组件。因此,我决定不使用TableView,而是从头开始(即Control)。我采用了VirtualFlow的思想,只创建和管理表中可见的部分,并重用不可见的单元格。然而,我需要虚拟的行和列 我的CustomVirtualFlow实现了layoutChildren()。从组件的大小和滚动条的位置,我知道哪些单元格是可见的。如有必要,我会将单元格添加到VirtualFlow。然后我更新内容和css伪类状态(选中、聚焦等) 这几乎很好用。。。目前,我唯

我正在为非常大和非常自定义的内容开发一个自定义表组件。因此,我决定不使用
TableView
,而是从头开始(即
Control
)。我采用了
VirtualFlow
的思想,只创建和管理表中可见的部分,并重用不可见的单元格。然而,我需要虚拟的行和列

我的CustomVirtualFlow实现了
layoutChildren()
。从组件的大小和滚动条的位置,我知道哪些单元格是可见的。如有必要,我会将单元格添加到VirtualFlow。然后我更新内容和css伪类状态(选中、聚焦等)

这几乎很好用。。。目前,我唯一的问题是css样式有时会滞后:新创建的单元格会显示一段时间错误的背景,然后在下一个脉冲中得到纠正

我对此的解释是,JavaFX在两个过程中执行布局: 首先是一个css过程,其次是调用layoutChildren()的布局过程。 因此,新添加的子项(在layoutChildren期间)的css处理不正确

我试图直接调用applyCss(),这很有帮助,但似乎做得太多了,因为这需要很多时间

我的问题是: 如何在布局过程中正确添加节点,即如果组件的大小需要使用更多节点?
如果不是在layoutChildren()期间,我还应该在哪里执行此操作?

据我所知,您关于css过程和布局过程的假设是正确的。在中,它试图提供更好的虚拟流(但仅在一个方向上虚拟化),我也在添加新单元后显式调用
applyCss()
。它似乎运行得相当好。但的确,这是一个巨大的痛苦。请确保只在新添加的单元格上调用
applyCss()
,而不是整个虚拟流。@TomasMikula感谢您的提示——只在新创建的单元格上调用applyCss()可以节省一些时间,并且“工作得相当好”,正如您所说:仍然不确定,添加单元格的正确时机/地点是什么。这是我在这个主题上能够获得的最好的资源:因此,您可以在
layoutChildren
compute*
方法中添加子节点,但无论哪种方式,您都需要手动调用
applyCss
。我记得openjfx开发人员邮件列表中也讨论了这一点,但我认为讨论的结果总结在链接的博客文章中。