【问题标题】:TableColumn prefWidth表列首选项宽度
【发布时间】:2020-11-09 07:35:55
【问题描述】:

我的代码中有一个 TableView,我在应用程序关闭时保存每个 TableColumn 的索引和宽度(值保存到属性文件中)。当我再次启动应用程序时,我想将每个 TableColumns 的索引和宽度重置回应用程序关闭时的状态。

        // If all columns are known, reorder the columns and set the width
        if (allKnown) {
            ObservableList<TableColumn<T, ?>> columns = FXCollections.observableArrayList();

            // Column order and width
            TableColumn<T, ?> column;
            for (int i = 0; i < colIndex.length; i++) {
                column = getOriginalColumns().get(colIndex[i]);
                column.setPrefWidth(colWidths[i]);
                columns.add(column);
            }
            getTableView().getColumns().setAll(columns);
        }
        getTableView().setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

设置索引工作正常,列设置在 TableView 的正确位置。但是,这不适用于列的 prefWidth(所有列都可以调整大小)。我看过不同的论坛,罪魁祸首似乎是 CONSTRAINED_RESIZE_POLICY。我想保留该选项,因为我的应用程序的主屏幕可以调整大小。如果我使用不受约束的宽度,那么宽度会起作用,但是当应用程序的主窗口调整大小时,我失去了自动缩放 TableView 的能力。

有没有人遇到过同样的情况并找到了解决方案?非常感谢您的帮助。

【问题讨论】:

  • hmm .. 不适用于列的 prefWidth 您到底期望什么? sn-p 应该以首选项启动,前提是 tableView(及其上至布局根/场景/阶段的父级)具有与存储时相同的宽度。也就是说:最好提供一个minimal reproducible example,这样我们就可以看一下(可能是fx中的一个错误,约束模式是..;)
  • 好吧,我的预期是错误的:该策略不关心首选项,而是简单地将可用宽度均匀分布在各列中......这有多奇怪......
  • 下一轮(大声思考 ;) - 对于初始大小,它类似于旧的 Swing 调整大小代码(减去对 pref 大小的关注):新列大小为 min + factor* (max - min),因子接近 @987654325 @ 这对于所有列都是相同的 .. 要在首选项上实现一些偏差,您可以(如果需要,暂时)将每个列最大值设置为其首选项的小倍数(3、4、5 .. 实验位)。跨度>
  • 也许这对你有帮助link
  • 我查看了 micpog90 提供的链接,这并没有太大帮助,它只是证实了 kleopatra 已经说过的话。我对受限调整大小的宽度分布感到满意,但我只是不明白为什么它不考虑首选宽度。我认为应该发生的是,表格的宽度均匀分布在没有设置首选宽度(和/或最大宽度?)的列上。

标签: javafx javafx-8


【解决方案1】:

我发现的唯一解决方案是最初设置 minWidth 而不是 prefWidth。然后在显示 UI 后几个脉冲,修复 minWidth 以便重新调整列大小正常工作。

【讨论】:

  • 为什么投反对票?尽管丑陋,但此解决方法解决了在 CONSTRAINED_RESIZE_POLICY 生效时恢复列宽的问题。正如 kleopatra 所指出的,该实现不关注首选大小。但是,它确实注意最小尺寸。缺少对 JavaFX 的更改,我不确定是否有更好的方法来获得所需的效果。
  • 它可能有多丑,它解决了问题。我已将 minWidth 的重置包装在执行业务的 Platform.runLater 中。感谢您指向正确方向的指针!
猜你喜欢
  • 2014-02-09
  • 2012-10-28
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多