JavaFX 8 - 同步两个垂直堆叠的TableView

时间:2017-05-16 15:05:19

标签: java javafx javafx-8

我正在使用JavaFX 8,我的用户界面需要两个TableView,一个垂直位于另一个之上(即VBox的两个子节点)。 VBox本身位于SplitPane中,因此表格的宽度可以增大或缩小。

这两个表各有5列,这5个列在两个表之间是相同的。

这就是我需要的:

1)每个表中的1,2,4和5列应根据(A)自己计算的大小(即基于其内容)或(B)计算出的大小的最小值来确定大小。另一个表中的同一列。

2)每个表中的第3列应该占用剩余的空间。

所有这一切的实际结果是所有列始终在两个表之间垂直对齐,并且列1,2,4和5总是足够大以显示其内容。

我不需要代码,但任何人都可以提出实现此目的的策略(例如,将属性A绑定到属性B那里,或者其他什么)?我想避免长时间或复杂的听众系统保持一切同步。

如果它更容易,则没有一列需要用户可调整大小。

更新

有两个表而不是一个表(这会使整个事情更容易)的原因是它们之间有一个显示一些摘要信息的区域。如果可以显示摘要信息TableRow(可能被迫有5列),那也可能是一个可行的答案。

更新#2

另请注意,其中一个,两个或两个表都没有垂直滚动条。

1 个答案:

答案 0 :(得分:0)

我通过创建一个包含所有行的第三个不可见表来解决这个问题。我使第三个桌子的高度非常小,以确保它有一个垂直滚动条。

从那里开始,我只需要为那个(隐藏)表正确地调整列大小 - 这是一个已经发布了许多解决方案的问题 - 然后绑定所有可见列的prefWidth他们在隐藏的类比中的类比。

所以,它基本上是:

SplitPane
  -> StackPane
     -> VBox
        -> Top TableView (column widths bound to Hidden TableView)
        -> Bottom TableView (column widths bound to Hidden TableView)
     -> Hidden TableView (height 10px and `CONSTRAINED_RESIZE_POLICY`)

StackPane是必需的,因此隐藏的TableView实际上不占用屏幕上的任何空间。 (另一个选择是让它不受管理,但那是更多的工作)。

它运作良好,但绝对看起来像一个kludge。我不会接受我自己的答案(如果可能的话)......我还是喜欢更好的答案!