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

标签 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 绑定(bind)到那里的属性 B,或者其他什么)?我希望避免使用冗长或复杂的监听器系统来保持所有内容同步。

如果更容易的话,所有列都不需要由用户调整大小。

更新

之所以有两个表而不是只有一个(这将使整个事情变得更容易)是因为它们之间有一个区域显示一些摘要信息。如果可以将摘要信息显示为 TableRow(可能强制为 5 列),那么这也可能是一个可行的答案。

更新#2

另请记住,两个表中的一个、两个或两个表都可能没有垂直滚动条。

最佳答案

我通过创建第三个包含所有行的不可见表解决了这个问题。我将第三个表的高度设置得非常小,以保证它有一个垂直滚动条。

从那里,我只需为该一个(隐藏)表正确调整列的大小 - 这是一个已经发布了许多解决方案的问题 - 然后将所有可见列的 prefWidth 绑定(bind)到隐藏表中的类似列。

所以,基本上是:

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 实际上不会占用屏幕上的任何空间。 (另一种选择是使其不受管理,但这需要更多工作)。

它工作得很好,但绝对看起来是一个拼凑。我不会接受我自己的答案(如果可能的话)...我仍然想要一个更好的答案!

关于JavaFX 8 - 同步两个垂直堆叠的 TableView 上的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005148/

相关文章:

java - 如何通过比较 2 个 DatePickers 获得 BooleanBinding?

java - 不推荐使用controlsfx 对话框是为了什么?

css - 使用 CSS 在 FXML 中设置 TableColumn 宽度的问题

java - 是否可以在 Scala 中使用 Java 8 风格的方法引用?

JavaFX:鼠标落后于绘图

java - 是否可以更改与表名不同的 BO 类名?

java - JWrapper 示例应用程序无法在 Mac OS X 10.8.5 上启动

JavaFX:在 SplitPane 中隐藏带有 slider 的固定 Pane

java - 是否可以查看 Tomcat 7 服务器的 Java 控制台?

Java (Selenium WebDriver) - 如何编写紧凑的代码