我正在使用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列),那也可能是一个可行的答案。
另请注意,其中一个,两个或两个表都没有垂直滚动条。
答案 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。我不会接受我自己的答案(如果可能的话)......我还是喜欢更好的答案!