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
,