【发布时间】: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 已经说过的话。我对受限调整大小的宽度分布感到满意,但我只是不明白为什么它不考虑首选宽度。我认为应该发生的是,表格的宽度均匀分布在没有设置首选宽度(和/或最大宽度?)的列上。