Почему прямоугольники javafx не отображают свой цвет при изменении размера getWidth / Height родительского контейнера? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь использовать прямоугольники в качестве фона для текстовых меток, помещая их за текстом VBox в StackPane, но когда я пытаюсь использовать значения getWidth () или getHeight () VBox для размера прямоугольника, прямоугольник делает не появляются Я полагаю, я мог бы

Это работает, отображая синий прямоугольник за текстом, хотя и не того размера, который мне нужен:

StackPane tadPane = new StackPane();
tadPane.setBorder(border);
Rectangle tadRec = new Rectangle();
VBox tadBox = new VBox();
Label totalXP = new Label("Total XP: ");
Label diff = new Label("Difficulty: ");
tadBox.getChildren().addAll(totalXP,diff);
tadRec.setWidth(50);
tadRec.setHeight(50);
tadRec.setFill(Color.BLUE);
tadPane.getChildren().addAll(tadRec,tadBox);

Но это не так, прямоугольник не виден:

StackPane tadPane = new StackPane();
tadPane.setBorder(border);
Rectangle tadRec = new Rectangle();
VBox tadBox = new VBox();
Label totalXP = new Label("Total XP: ");
Label diff = new Label("Difficulty: ");
tadBox.getChildren().addAll(totalXP,diff);
tadRec.setWidth(tadBox.getWidth());
tadRec.setHeight(tadBox.getHeight());
tadRec.setFill(Color.BLUE);
tadPane.getChildren().addAll(tadRec,tadBox);

Я не могу понять, почему это происходит. Необработанные числа в setWidth / Height работают, но getWidth / Height из VBox также должны возвращать числа, если надписи с текстом находятся внутри.

1 Ответ

0 голосов
/ 14 января 2019

Причина этого заключается в том, что во время извлечения высоты и ширины для макета VBox не было выполнено ни одного прохода макета, поэтому размер по-прежнему равен 0 x 0.

Вы можете использовать привязки, чтобы обновить размер макета:

tadRec.widthProperty().bind(tadBox.widthProperty());
tadRec.heightProperty().bind(tadBox.heightProperty());

хотя было бы гораздо проще просто применить фон к VBox вместо использования Rectangle:

tadBox.setStyle("-fx-background-color: blue;");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...