JavaFX:如果列的宽度等于最小宽度,则无法调整列的大小

时间:2019-08-27 08:01:49

标签: java javafx

我的问题
我正在尝试调整列的大小,并且起初它是按预期工作的。但是,只要列的宽度与最小宽度相同,就不再起作用。

就像卡住了。作为用户,除非调整整个窗口的大小,否则不能将其放大。

我大致知道问题所在。我认为是因为没有空间可以使单元格变大。

我尝试过的事情
我所知道的是,如果我删除此行,它将起作用。

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()));

有人可以帮助我进行回调吗?我不是问你是否可以给我打电话(但如果你愿意),我是问你能否给我一个提示或一些我如何实现的提示。

0 个答案:

没有答案