Javafx GridPane, как центрировать узел? (Текст / этикетка) - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь изучить Javafx для класса, который я посещаю. У меня много трудностей при переходе от шаблонов HTML + ERB к инфраструктуре Javafx (я являюсь разработчиком Rails).

По какой-то причине я не могу центрировать узел Label в области сетки. Вот мой start метод:

@Override
    public void start(Stage stage) throws Exception {
        GridPane root = new GridPane();
        FlowPane leftbanner = new FlowPane();

        leftbanner.setPrefWidth(200);
        String bgStyle = "-fx-background-color: lightblue;"
                         + "-fx-background-radius: 0%;"
                         + "-fx-background-inset: 5px;";
        leftbanner.setStyle(bgStyle);

        root.add(leftbanner, 0, 0, 1, 1);
        root.add(createGridPane(), 1, 0, 1, 1);

        Scene scene = new Scene(root, 700, 500);
        stage.setTitle("Recommendify");
        stage.setScene(scene);
        stage.show();
    }

Я использую метод createGridPane для создания своего приложения. Вот содержание этого метода, который включает мои попытки центрировать ярлык:

public GridPane createGridPane() {
        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10));
        grid.setHgap(10);
        grid.setVgap(10);

        Text txt = new Text("Recommendify");
        txt.setFont(Font.font("Dialog", FontWeight.BOLD, 12));
        GridPane.setHalignment(txt, HPos.CENTER);

        grid.add(txt, 0, 0, 1, 1);
        grid.add(new Separator(), 0, 1, 3, 1);

        return grid;
}

Я также попробовал эти решения, размещенные здесь: Выравнивание JavaFX метки в GridPane

Нужно ли бросать этот узел Label в контейнер, чтобы центрировать его в GridPane? Как HBox или VBox?

1 Ответ

0 голосов
/ 05 ноября 2018

Нет ничего плохого в вашем коде. Текст «Рекомендовать» центрирован в ячейке . Однако ячейка не шире самого текста.

Это можно увидеть, включив линии сетки в методе createGridPane():

grid.setGridLinesVisible(true);

screenshot


Чтобы проверить выравнивание, вы можете добавить ColumnConstraints к GridPane:

grid.getColumnConstraints().add(new ColumnConstraints(150));

Приведенный выше оператор устанавливает предпочтительную ширину первого столбца равной 150. Вот новый результат:

screenshot 2

Как видите, узел Text отцентрирован правильно.

РЕДАКТИРОВАТЬ: Имейте в виду, что если вы хотите, чтобы ваши Text были центрированы над Separator, который вы добавили во второй ряд, вам нужно иметь он также охватывает 3 столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...