我有一个 TableView 的列数超过了屏幕宽度。第一次加载时,所有列的宽度都相同,但是,只要我移动其中一个,它们都会被调整为等于列单元格内数据的最大宽度的宽度。
我的问题是:是否可以禁用此行为或使其在第一次加载 TableView 之前工作?
PS: TableView 加载为空,然后按下一个按钮它会填充数据,因为在发送数据请求之前您需要输入一些关键字段。
我有一个 TableView 的列数超过了屏幕宽度。第一次加载时,所有列的宽度都相同,但是,只要我移动其中一个,它们都会被调整为等于列单元格内数据的最大宽度的宽度。
我的问题是:是否可以禁用此行为或使其在第一次加载 TableView 之前工作?
PS: TableView 加载为空,然后按下一个按钮它会填充数据,因为在发送数据请求之前您需要输入一些关键字段。
第一次加载时,所有列的宽度都相同,但是,只要我移动其中一个,它们都会被调整为等于列单元格内数据的最大宽度的宽度。
这种行为有点奇怪。我不确定它是否符合预期,或者它是否是一个错误。如果您认为这是一个错误,请将其归档在JavaFX 错误跟踪器中。
我假设移动意味着您单击表头并将列拖到另一个位置以重新排序列。
似乎(至少)有两种方法可以修复它,以便在列移动后保持用户指定的列宽。
A. 使用 CONSTRAINED_RESIZE_POLICY(大部分)修复它。
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
或者
B. 将每列的 prefWidth 绑定到它的实际宽度。
firstNameCol.prefWidthProperty().bind(firstNameCol.widthProperty());
经过一些测试,我发现所描述的行为的原因是:没有明确设置列prefWidth。
如果您从一开始就创建了一个包含数据的 Tableview 并且没有设置列 prefWidth,所有列的宽度都将匹配数据的最大宽度,如果您更改列宽,只要您拖动一个,宽度就会恢复到原始值。
如果您从一开始就创建一个包含数据的 Tableview 并设置列 prefWidth,则所有列的宽度都将与设置的值匹配,如果您在拖动一列之前放大一列,那么该列的宽度将保持不变。
我不知道这是一个错误还是想要的。不过,谢谢jewelsea 的建议。