JavaFX: сделать содержимое центра BorderPane не растянутым

Просто быстрый для вас, так как я, как правило, неопытный в разработке приложений. Любая помощь будет принята с благодарностью.

У меня есть следующее приложение, и очевидно, что оно использует BorderPane для его макета. у меня есть GridPane из 5 этикеток и 5 textFields в Center регион, и я хотел тонкую границу для этого.

Скриншот

Как видите, GridPane использует все пространство, выделенное ему в Center область, и хотя граница хорошо рисуется, она проходит до самого дна Center регион (красные стрелки).То, что я хочу сделать, это закончить на синей линии.

Я пытался с помощью grid.setPrefHeight(400);Например, но это не сработало.

Есть ли какие-либо решения, кроме очевидного, чтобы добавить второй контейнер под GridPane и сжать верхний контейнер достаточно?

РЕДАКТИРОВАТЬ: для справки, это код, который создает центральную область GridPane:

public GridPane addGridPaneCenter() {
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(0, 10, 0, 10));

sihuid = new Text("SIHU ID:");
sihuid.setFont(Font.font("Inconsolata", 16));
grid.add(sihuid, 0, 1);                                           //spans from 0,1 to 1,1 (Column-Row)
sihuid_tf = new TextField();
sihuid_tf.setEditable(false);
grid.add(sihuid_tf, 1, 1);

mac = new Text("Plug MAC:");
mac.setFont(Font.font("Inconsolata", 16));
grid.add(mac, 0, 2);
mac_tf = new TextField();
mac_tf.setEditable(false);
grid.add(mac_tf, 1, 2);

loc = new Text("Location:");
loc.setFont(Font.font("Inconsolata", 16));
grid.add(loc, 0, 3);
loc_tf = new TextField();
loc_tf.setEditable(false);
grid.add(loc_tf, 1, 3);

appl = new Text("Appliance:");
appl.setFont(Font.font("Inconsolata", 16));
grid.add(appl, 0, 4);
appl_tf = new TextField();
appl_tf.setEditable(false);
grid.add(appl_tf, 1, 4);

type = new Text("Type:");
type.setFont(Font.font("Inconsolata", 16));
grid.add(type, 0, 5);
type_tf = new TextField();
type_tf.setEditable(false);
grid.add(type_tf, 1, 5);

grid.setPrefHeight(400);
grid.setStyle(
    "-fx-border-color: #b8b8ba; -fx-border-width: 1;"
    + "-fx-border-radius: 4;"
    /*+ "-fx-font: " + "Inconsolata" + ";" */
); 
return grid;

}

После этого есть простой

GridPane grid_center = addGridPaneCenter();                             //CENTER Grid, contains info about plugs.
        border_pane.setCenter(grid_center);

    Scene scene = new Scene(border_pane, 900, 700);
    scene.setFill(Color.GHOSTWHITE);

    primaryStage.setTitle("PlugControl v0.1e");
    primaryStage.setScene(scene);
    primaryStage.show();

1 ответ

Боюсь, это поведение BorderPane по замыслу ( ссылка):

Размер верхнего и нижнего дочерних элементов будет изменен до их предпочтительных высот и увеличит ширину пограничной панели. Размер левого и правого дочерних элементов будет изменен до их предпочтительной ширины и увеличена длина между верхним и нижним узлами. И центральный узел будет изменен, чтобы заполнить доступное пространство в середине.

Вы, вероятно, должны поставить GridPane в AnchorPane или же VBox и положить это (AnchorPane или же VBox) в центре BorderPane,

Другие вопросы по тегам