【问题标题】:JavaFX, columns in TableView resize after been movedJavaFX,TableView中的列在移动后调整大小
【发布时间】:2013-10-25 17:46:57
【问题描述】:

我有一个 TableView,其列数超过了屏幕宽度。第一次加载时,所有列都具有相同的宽度,但是,一旦我移动其中的一个,所有列的大小都会调整为等于列单元格内数据的最大宽度的宽度。

我的问题是:是否可以禁用此行为或使其在第一次加载 TableView 之前工作?

PS: TableView 加载为空,然后按下一个按钮它会填充数据,因为在发送数据请求之前您需要输入一些关键字段。

【问题讨论】:

    标签: javafx-2 tableview tablecolumn


    【解决方案1】:

    经过一些测试,我发现所描述的行为的原因是:没有明确设置列prefWidth。

    如果您从一开始就创建了一个包含数据的 Tableview,并且没有设置列 prefWidth,所有列的宽度都将匹配数据的最大宽度,如果您更改列宽,只要拖动一个宽度将恢复为原始值。

    如果您从一开始就创建了一个包含数据的 Tableview 并设置列 prefWidth,所有列的宽度都将与设置的值匹配,如果您在拖动之前放大一列,则该列的宽度将保持不变.

    我不知道这是一个错误还是需要的。不过谢谢jewelsea 的建议。

    【讨论】:

      【解决方案2】:

      第一次加载时,所有列的宽度都相同,但只要我移动其中一个,所有列都会调整为等于列单元格内数据的最大宽度的宽度。

      这种行为有点奇怪。我不确定它是否符合预期或是否是错误。如果您认为这是一个错误,请将其提交到JavaFX bug tracker

      我假设移动是指单击表格标题并将列拖到另一个位置以重新排列列。

      似乎(至少)有两种方法可以修复它,以便在列移动后保持用户指定的列宽。

      A.使用 CONSTRAINED_RESIZE_POLICY(大部分)修复它。

      table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
      

      B.将每列的 prefWidth 绑定到它的实际宽度。

      firstNameCol.prefWidthProperty().bind(firstNameCol.widthProperty());
      

      【讨论】:

      • 行为与 CONSTRAINED_RESIZE_POLICY 或 UNCONSTRAINED_RESIZE_POLICY 相同。 B计划也行不通。
      • CONSTRAINED_RESIZE_POLICY 对我来说当然适用于 JavaFX 2.2b40。
      • 这是 CONSTRAINED_RESIZE_POLICY 的定义:“确保此表中所有可见叶列的宽度之和等于表本身宽度的简单策略”。因此,当数据加载到表格中时它可以工作,但是当您拖动列时,列宽会调整大小。
      猜你喜欢
      • 2013-01-17
      • 2014-10-31
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多