如何使JavaFX TableView中的最后一列占用剩余空间。
我尝试了table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
,但这会使列大小相等。我只希望在窗口宽度增加时最后一列增长。
答案 0 :(得分:2)
如果您希望tableview中的所有列都填满tableview可用的窗口空间并动态调整大小以适应更改窗口大小,则需要将列属性绑定到tableview的宽度。 / p>
例如,假设我在tableview中有5列。我希望它们始终是可用宽度的固定百分比(这样当窗口调整大小时,列的比例保持不变)。您可以使用相同的属性绑定习惯用法轻松地形成自己的列大小规则(例如,我希望最后一列占用所有剩余空间)。
在具有TableView控件的控制器的initialize()方法中,我可以执行以下操作:
void initialize() {
// Initialize your logic here: all @FXML variables will have been injected
:
:
// TableView column control variables are prefixed with "tco"
tcoLast.setCellValueFactory(new PropertyValueFactory<Client.Expand, String>("lastName"));
tcoFirst.setCellValueFactory(new PropertyValueFactory<Client.Expand, String>("firstName"));
tcoDoB.setCellValueFactory(new PropertyValueFactory<Client.Expand, Integer>("doB"));
tcoMRN.setCellValueFactory(new PropertyValueFactory<Client.Expand, String>("defMRN"));
tcoGen.setCellValueFactory(new PropertyValueFactory<Client.Expand, String>("gender"));
// Cell factories for rendering certain columns in the TableView
tcoLast.setCellFactory(new ClientNameTableCellFactory());
tcoFirst.setCellFactory(new ClientNameTableCellFactory());
tcoDoB.setCellFactory(new ClientDoBTableCellFactory());
// Set fixed column widths that resize automatically
// Values are weighted to be a fraction of a total of 41 (arbitrary)
tcoLast.prefWidthProperty().bind(tbvMatches.widthProperty().multiply(11.0/41.0));
tcoFirst.prefWidthProperty().bind(tbvMatches.widthProperty().multiply(11.0/41.0));
tcoDoB.prefWidthProperty().bind(tbvMatches.widthProperty().multiply(8.0/41.0));
tcoMRN.prefWidthProperty().bind(tbvMatches.widthProperty().multiply(8.0/41.0));
tcoGen.prefWidthProperty().bind(tbvMatches.widthProperty().multiply(2.0/41.0));
:
:
}