TableColumn prefWidth

TableColumn prefWidth

我的代码中有一个 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。我想保留该选项,因为我的应用程序的主屏幕可以调整大小。如果我使用 unconstrained,则宽度有效,但是当应用程序的主要 window 调整大小时,我失去了自动缩放 TableView 的能力。

有没有人有同样的经历并找到了解决办法?非常感谢您的帮助。

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