如何将javafx - tableview大小修复为当前窗口大小

时间:2016-08-12 07:15:45

标签: javafx tableview autoresize

我对独立应用程序完全陌生。请任何人帮助我。

我的TableView有6列,在窗口中显示一半,如下所示。

enter image description here

我想修复当前窗口大小,即使窗口展开,tableview也应自动调整大小。有没有办法做到这一点?

这是代码段

GridPane tableGrid= new GridPane();
tableGrid.setVgap(10);
tableGrid.setHgap(10);
Label schoolnameL= new Label(SCHOOL+school_id);
schoolnameL.setId("schoolLabel");
Button exportDataSheetBtn= new Button("Export In File");
tableView.setMaxWidth(Region.USE_PREF_SIZE);
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
tableGrid.getChildren().addAll(schoolnameL,exportDataSheetBtn,tableView);

4 个答案:

答案 0 :(得分:3)

这可以通过将首选高度和宽度绑定到主要舞台的高度和宽度来完成。这是一个MCVE

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class MCVE extends Application {

    @Override
    public void start(Stage stage) {

        TableView<ObservableList<String>> table = new TableView<ObservableList<String>>();

        // We bind the prefHeight- and prefWidthProperty to the height and width of the stage.
        table.prefHeightProperty().bind(stage.heightProperty());
        table.prefWidthProperty().bind(stage.widthProperty());

        stage.setScene(new Scene(table, 400, 400));
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

答案 1 :(得分:2)

VBox.setVgrow(tableView, Priority.ALWAYS);

或用于您的父布局:

 VBox.setVgrow({{PARENT}}, Priority.ALWAYS);

它为我修好了:

enter image description here

enter image description here

答案 2 :(得分:0)

您可以使用ScrollPane作为场景的根,并将其他所有内容放入其中。然后将属性setFitToWidth和setFitToHeight设置为true,并且ScrollPane内的所有内容都将被拉伸以适应ScrollPane大小,并且ScrollPane将适合Scene,因为它的布局窗格。如果用户将窗口大小调整为小于内容minWidth,它也会显示ScrollBars,因此内容不会被切断!

@Override
public void start(Stage stage) {

    TableView<ObservableList<String>> table = new TableView<ObservableList<String>>();
    table.setMinWidth(400);

    ScrollPane sp = new ScrollPane(table);
    sp.setFitToHeight(true);
    sp.setFitToWidth(true);

    stage.setScene(new Scene(table, 800, 600));
    stage.show();
}

public static void main(String[] args) {
    launch();
}

我复制了部分MCVE来自Jonathan的回答,希望你不介意Jonathan:)

有关制作可调整大小的GUI的更多一般提示,请查看此post

答案 3 :(得分:0)

在GridPane中创建Tabel并在AnchorPane中使用GridePane。单击GridPane(capture1)。 enter image description here 单击GridPane布局(captur2)内的Ancho Pane Constraint。 enter image description here

在表格视图的布局中,将Hgrow和Vgrow选择为“ Always”(capture3)enter image description here