как исправить javafx - размер таблицы до текущего размера окна

Я совершенно новичок в автономных приложениях. Пожалуйста, помогите мне в этом.

У меня есть TableView с 6 столбцами, которые наполовину отображаются в окне, как показано ниже.

введите описание изображения здесь

Я хочу исправить текущий размер окна, даже когда окно развернуто, табличное представление должно автоматически изменять размер. Есть какой-либо способ сделать это?

Это фрагмент кода

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

person Rakesh SKadam    schedule 12.08.2016    source источник
comment
Добавление некоторого кода, связанного с TableView и его родительским контейнером, поможет нам лучше помочь вам.   -  person ItachiUchiha    schedule 12.08.2016


Ответы (4)


Это можно сделать, привязав предпочтительную высоту и ширину к высоте и ширине основной сцены. Вот 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();
    }

}
person Jonatan Stenbacka    schedule 12.08.2016

VBox.setVgrow(tableView, Priority.ALWAYS);

ИЛИ для ваших родительских макетов:

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

Это исправлено для меня:

введите здесь описание изображения

введите здесь описание изображения

person Roman Shubenko    schedule 27.01.2021

Вы можете использовать ScrollPane в качестве корня сцены и поместить в него все остальное. Затем установите для свойства setFitToWidth и setFitToHeight значение true, и все содержимое внутри ScrollPane будет растянуто, чтобы соответствовать размеру ScrollPane, а ScrollPane будет соответствовать сцене, поскольку это панель макета. Он также будет отображать полосы прокрутки, если пользователь изменяет размер окна, чтобы он был меньше, чем содержимое minWidth, поэтому содержимое не обрезается!

@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 из ответа Джонатана, надеюсь, вы не возражаете против Джонатана :)

Более общие советы по созданию графических интерфейсов с изменяемым размером см. в этом сообщении!

person 404KnowledgeNotFound    schedule 12.08.2016

Создайте Tab внутри GridPane и используйте GridePane внутри AnchorPane. Щелкните GridPane (capture1). введите описание изображения здесь Нажмите на Ancho Pane Constraint внутри макета GridPane (captur2). введите здесь описание изображения

В макете таблицы выберите Hgrow и Vgrow как «Всегда» (capture3)введите здесь описание изображения

person S.Rumeshi    schedule 20.07.2018