Существует необъяснимый пробел между кнопками

#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 класс, поэтому я просто создаю ярлыки вместо этого) и включения линий сетки обнаруживается проблема:

скриншот 1

Вы можете видеть, что Computer Science Label в GridPane местоположении 0, 1 имеет большую ширину, чем Computer Science Button . Это приводит к GridPane увеличению ширины первого столбца для размещения Label .

У вас есть несколько вариантов решения этой проблемы, в зависимости от того, как вы хотите, чтобы макет работал.

1) Установите диапазон столбцов:

Если вы хотите сохранить Computer Science Button того же размера, но ширина первого столбца не увеличивается, чтобы соответствовать Label , просто сделайте так, чтобы он Label охватывал 2 столбца:

 GridPane.setColumnSpan(txt1, 2);
  

скриншот 2

2) Увеличить ширину кнопки:

Если вы хотите, чтобы Computer Science Button расширился и заполнил оставшуюся часть столбца, вы можете установить для его MaxWidth свойства максимальное значение:

 btn1.setMaxWidth(Double.MAX_VALUE);
  

скриншот 3