Как установить разную высоту для детей VBox - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать TreeView, где каждый TreeCell представляет оператор в программе. Вызвав setGraphics, я хочу заменить ячейку по умолчанию настроенной Node, как показано на следующем рисунке.

enter image description here

Я использую VBox, так как все дети расположены вертикально. Верхний колонтитул и Нижний колонтитул представляют собой 2 крошечные области, зарезервированные для операций перетаскивания. например Я могу перетащить новый оператор перед текущим, наведя курсор на его заголовок.

Я хочу использовать Label для верхнего и нижнего колонтитула, и я хочу ограничить их высоту до 2 пикселей, поэтому я попытался:

public VBox getTestContainer() {
    VBox vbox = new VBox();
    Label header = new Label();
    header.setPrefHeight(2);
    header.setPrefWidth(200);
    ... ... ...
    vbox.getChildren().add(header, ..., footer);
}

public void start(Stage stage) throws Exception {

    Group root = new Group();
    root.getChildren().add(getTestBlock());
    stage.setTitle("Test");
    stage.setScene(new Scene(root, 400, 300));
    stage.show();
}

Чтобы убедиться, что размер VBox не изменен другими панелями макета, я просто поместил его в Group.

setPrefWidth работает, он дает мне ширину 200 пикселей Label и VBox, но setPrefHeight - нет. Как видите, высота заголовка намного больше 2 пикселей.

enter image description here

У меня вопрос, как правильно установить высоту Label?

1 Ответ

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

Установка prefHeight (или maxHeight) на значение, меньшее, чем вычисленная минимальная высота Label, по-прежнему приводит к тому, что минимальная высота метки используется в качестве наименьшей возможной высоты для Label. Эта минимальная высота зависит от размера шрифта.

header.setFont(Font.font(2));

Уменьшит расчетную минимальную высоту.

Поскольку не похоже, что вы пытаетесь добавить какой-либо текст в эти узлы, просто используйте Region s вместо Label s в качестве первого и последнего потомка VBox.

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