#java #javafx
#java #javafx
Вопрос:
У меня проблема с упражнением. Существует необъяснимый пробел между первой и второй кнопками на сцене. Я изменил расположение кнопок, но по-прежнему у первой есть пробел от второй. Что является причиной этого и как я могу сократить этот пробел? https://imgur.com/hYolYE2
public void start(Stage myStage) {
GridPane myPane = new GridPane();
myPane.setPadding(new Insets(10, 10, 10, 10));
myPane.setHgap(10);
myPane.setVgap(10);
Button btn1 = new Button("Computer Scinence");
Button btn2 = new Button("Chemistry");
Button btn3 = new Button("Arts");
DrawText txt1 = new DrawText("Computer Scince","Times Roman",FontWeight.BOLD,FontPosture.ITALIC,20,Color.GREEN);
DrawText txt2 = new DrawText("Chemistry","Times Roman",FontWeight.BOLD,FontPosture.ITALIC,20,Color.BLUE);
DrawText txt3 = new DrawText("Arts","Times Roman",FontWeight.BOLD,FontPosture.ITALIC,20,Color.YELLOW);
GridPane.setConstraints(btn1,0,1);
GridPane.setConstraints(btn2,1,1);
GridPane.setConstraints(btn3,2,1);
GridPane.setConstraints(txt1,0,2);
GridPane.setConstraints(txt2,0,3);
GridPane.setConstraints(txt3,0,4);
myPane.getChildren().addAll(btn1,btn2,btn3,txt1,txt2,txt3);
Scene myScene = new Scene(myPane,350,190);
myStage.setScene(myScene);
myStage.setTitle("Exercise 3_3");
myStage.show();
}
Комментарии:
1. взгляните на java-документ GridPane, в частности, на спецификацию того, как он определяет размеры своего содержимого
Ответ №1:
Вы часто можете отладить GridPane
проблемы с компоновкой, включив линии сетки:
myPane.setGridLinesVisible(true);
После воссоздания вашего приложения (вы не включили свой DrawText
класс, поэтому я просто создаю ярлыки вместо этого) и включения линий сетки обнаруживается проблема:
Вы можете видеть, что Computer Science Label
в GridPane
местоположении 0, 1
имеет большую ширину, чем Computer Science Button
. Это приводит к GridPane
увеличению ширины первого столбца для размещения Label
.
У вас есть несколько вариантов решения этой проблемы, в зависимости от того, как вы хотите, чтобы макет работал.
1) Установите диапазон столбцов:
Если вы хотите сохранить Computer Science Button
того же размера, но ширина первого столбца не увеличивается, чтобы соответствовать Label
, просто сделайте так, чтобы он Label
охватывал 2 столбца:
GridPane.setColumnSpan(txt1, 2);
2) Увеличить ширину кнопки:
Если вы хотите, чтобы Computer Science Button
расширился и заполнил оставшуюся часть столбца, вы можете установить для его MaxWidth
свойства максимальное значение:
btn1.setMaxWidth(Double.MAX_VALUE);