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