Я совершенно новичок в автономных приложениях. Пожалуйста, помогите мне в этом.
У меня есть 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);
Ответ 1 · рейтинг 10 · Jonatan Stenbacka
Это можно сделать, привязав предпочтительную высоту и ширину к высоте и ширине основной сцены. Вот 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();
}
}
Ответ 2 · рейтинг 2 · Roman Shubenko
VBox.setVgrow(tableView, Priority.ALWAYS);
ИЛИ для ваших родительских макетов:
VBox.setVgrow({{PARENT}}, Priority.ALWAYS);
Это исправлено для меня:
Ответ 3 · рейтинг 1 · 404KnowledgeNotFound
Вы можете использовать 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 из ответа Джонатана, надеюсь, вы не возражаете против Джонатана :)
Более общие советы по созданию графических интерфейсов с изменяемым размером см. в этом сообщении!
Ответ 4 · рейтинг 1 · S.Rumeshi
Создайте Tab внутри GridPane и используйте GridePane внутри AnchorPane. Щелкните GridPane (capture1). Нажмите на Ancho Pane Constraint внутри макета GridPane (captur2).
В макете таблицы выберите Hgrow и Vgrow как "Всегда" (capture3)