JavaFX: как получить ширину метки перед отображением? - PullRequest
0 голосов
/ 05 февраля 2019

В моем приложении JavaFX пользователь входит в систему, и приложение получает данные о пользователе.Одним из данных является название их компании.Приложение должно корректировать текст, чтобы поддерживать ширину Label.

. У меня есть прослушиватель textProperty(), который регулирует размер шрифта TextField в пределах Label.Функциональность ширины работает.Независимо от длины названия компании, оно подходит.Однако текст поменьше сжимается ближе к координате y Label, например так:

enter image description here enter image description here Граничит для выделения,Вершина - то, на что это похоже, когда это вписывается в ширину.Нижняя часть изменяет размер шрифта правильно, но не корректирует координату y соответственно.

Итак, у меня есть две идеи, и я не знаю, как это сделать.

  • Найдите способ setLayoutY() установить вертикальный центр Label, а не верхнюю часть Label, чтобы поддерживать вертикальное центрирование независимо от размера.
  • Используйте setLayoutY() для регулировки координаты y Label на основе нового размера шрифта.Проблема здесь в том, что я не знаю, как получить ширину моего текста до того, как отобразить его, поэтому в моем коде ниже labelHeight - это то же labelHeight, что и со шрифтом по умолчаниюеще не применяется.
// Resizes text to fit name lengths
companyNameLabel.textProperty().addListener((observable, oldValue, newValue) -> {

    Text tmpText = new Text(newValue);
    tmpText.setFont(Font.font("Oxygen", 72));

    double textWidth = tmpText.getLayoutBounds().getWidth();

    // Check if text width is greater than maximum width
    if (textWidth > 470) {

        // Change font size to fit within 470
        double newFontSize = 72 * 470 / textWidth;
        companyNameLabel.setFont(Font.font("Oxygen", newFontSize));

        // Finds y value for vertical centering
        double labelHeight = companyNameLabel.getHeight();
        System.out.println(labelHeight);
        companyNameLabel.setLayoutY(155 - labelHeight / 2);

    }
});

Спасибо.

1 Ответ

0 голосов
/ 05 февраля 2019

Я сомневаюсь, что кто-то еще совершил такую ​​же ошибку.Я уже пытался изменить положение на CENTER_LEFT, но у меня это не сработало, потому что я установил свой рост, чтобы автоматически вычислять высоту.Если у вас есть установленная высота, это будет работать нормально.Я пришел к выводу, что я должен быть мозговой мертвецом.

...