В моем приложении JavaFX пользователь входит в систему, и приложение получает данные о пользователе.Одним из данных является название их компании.Приложение должно корректировать текст, чтобы поддерживать ширину Label
.
. У меня есть прослушиватель textProperty()
, который регулирует размер шрифта TextField
в пределах Label
.Функциональность ширины работает.Независимо от длины названия компании, оно подходит.Однако текст поменьше сжимается ближе к координате y Label
, например так:
Граничит для выделения,Вершина - то, на что это похоже, когда это вписывается в ширину.Нижняя часть изменяет размер шрифта правильно, но не корректирует координату 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);
}
});
Спасибо.