我的问题
我正在尝试调整列的大小,并且起初它是按预期工作的。但是,只要列的宽度与最小宽度相同,就不再起作用。
就像卡住了。作为用户,除非调整整个窗口的大小,否则不能将其放大。
我大致知道问题所在。我认为是因为没有空间可以使单元格变大。
我尝试过的事情
我所知道的是,如果我删除此行,它将起作用。
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
但是我的程序需要这一行,因为文件的列数不同。我还需要此行,因为加载文件(列数/ tableview中的宽度=列宽)后,每一列的大小均应相同。
MCVE
public class GuiLayout extends Application {
private Scene mainScene;
private Stage mainStage;
private VBox mainBox;
private TableView<String> tableView;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
initTable();
mainStage = new Stage();
mainScene = new Scene(mainVBox(), 1000, 600);
ObservableList observableList = FXCollections.observableArrayList("1", "1234", "Avenue 1", "17", "Second", "Married", "M", "admin", "admin@admin.com", "Just", "Test", "no");
tableView.setItems(observableList);
tableView.prefWidthProperty().bind(mainBox.widthProperty());
tableView.prefHeightProperty().bind(mainBox.heightProperty());
mainStage.setScene(mainScene);
mainStage.show();
}
private GridPane mainGrid() {
GridPane gridPane = new GridPane();
gridPane.setVgap(10);
gridPane.setHgap(10);
gridPane.add(tableView, 0, 2);
return gridPane;
}
private VBox mainVBox() {
mainBox = new VBox();
mainBox.prefWidthProperty().bind(mainStage.widthProperty().multiply(0.8));
mainBox.setPadding(new Insets(10, 10, 10 ,10));
mainBox.getChildren().add(mainGrid());
return mainBox;
}
private TableView initTable() {
tableView = new TableView<>();
TableColumn<String, String> numberCol
= new TableColumn<>("Nr.");
TableColumn<String, String> plzCol
= new TableColumn<>("PLZ");
TableColumn<String, String> adressCol
= new TableColumn<>("Adress");
TableColumn<String, String> houseNumber
= new TableColumn<>("House number");
TableColumn<String, String> floorCol
= new TableColumn<>("Floor");
TableColumn<String, String> familyStatusCol
= new TableColumn<>("Family Status");
TableColumn<String, String> genderCol
= new TableColumn<>("Gender");
TableColumn<String, String> userNameCol //
= new TableColumn<>("User Name");
TableColumn<String, String> emailCol//
= new TableColumn<>("Email");
TableColumn<String, String> firstNameCol //
= new TableColumn<>("First Name");
TableColumn<String, String> lastNameCol //
= new TableColumn<>("Last Name");
// Active Column
TableColumn<String, Boolean> activeCol//
= new TableColumn<>("Active");
tableView.getColumns().addAll(numberCol, plzCol, adressCol, houseNumber, floorCol, familyStatusCol, genderCol, userNameCol, emailCol, firstNameCol, lastNameCol, activeCol);
for (int i = 0; tableView.getColumns().size() > i; i++){
tableView.getColumns().get(i).setMinWidth(100);
}
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
return tableView;
}
}
最后,我希望每列的宽度最小时都可以调整列的大小(使其更大)。
谢谢您的帮助。
编辑:
我知道我需要自定义的回叫,但我真的不知道应该如何实现。
我尝试了将“属性”设置为tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
并设置硬编码列的大小。
for (int o = 0; o < tableView.getColumns().size(); o++) {
tableView.getColumns().get(o).prefWidthProperty().bind(tableView.widthProperty().divide(tableView.getColumns().size()));
有人可以帮助我进行回调吗?我不是问你是否可以给我打电话(但如果你愿意),我是问你能否给我一个提示或一些我如何实现的提示。