JavaFX: динамическое масштабирование размера шрифта метки.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JavaFX: динамическое масштабирование размера шрифта метки.

Сообщение Anonymous »

Я работаю над приложением JavaFX, и внутри VBox есть две метки. Эти метки отображают результаты и операции калькулятора. Я хочу, чтобы размер шрифта этих меток динамически увеличивался при изменении размера или развертывании окна.
Вот часть моего кода FXML, определяющая VBox и метку: Кроме того, эти метки стилизованы под CSS-код:

Код: Выделить всё

.label-resultado {
-fx-text-fill: #ffffff;
-fx-font-size: 70;
-fx-font-family: 'Hind Siliguri Medium';
}

.label-review {
-fx-text-fill: #ffffff;
-fx-font-size: 24;
-fx-font-family: 'Hind Siliguri Medium';
}
Я уже пробовал добавить прослушиватель в VBox и в сцену, но размер шрифтов не изменился должным образом.

Код: Выделить всё

public class HelloController {

private static final double FONT_MIN_SIZE_RESULTADO = 70;
private static final double FONT_MIN_SIZE_REVIEW = 24;

public void inicializarStage(Stage stage) {
stage.widthProperty().addListener((obs, oldWidth, newWidth) -> ajustarFonte(stage));
stage.heightProperty().addListener((obs, oldHeight, newHeight) -> ajustarFonte(stage));
System.out.println(stage.getWidth()+" "+stage.getHeight());
}

private void ajustarFonte(Stage stage) {
double width= stage.getWidth();
double height= stage.getHeight();

// Escala de acordo com a janela atual, considerando 400x800 como base
double scaleWidth = width/ 360.6;
double scaleHeight = height / 677.0;

double novaFonteResultado = Math.max(FONT_MIN_SIZE_RESULTADO, FONT_MIN_SIZE_RESULTADO * Math.min(scaleWidht, scaleHeight));
double novaFonteReview = Math.max(FONT_MIN_SIZE_REVIEW, FONT_MIN_SIZE_REVIEW * Math.min(scaleWidht, scaleHeight));

resultadoTexto.setStyle("-fx-font-size: " + novaFonteResultado + "px;");
reviewTexto.setStyle("-fx-font-size: " + novaFonteReview + "px;");
}
Я подумал, что, возможно, программа не может перезаписать значения, установленные в CSS, поэтому я удалил оттуда и попробовал добавить их в метод инициализации, но это тоже не сработало .

Код: Выделить всё

public class HelloController {

private static final double FONT_MIN_SIZE_RESULTADO = 70;
private static final double FONT_MIN_SIZE_REVIEW = 24;

private void initialize() {
resultadoTexto.setStyle("-fx-font-size: " + FONT_MIN_SIZE_RESULTADO + "px;");
reviewTexto.setStyle("-fx-font-size: " + FONT_MIN_SIZE_REVIEW + "px;");
}

public void inicializarStage(Stage stage) {
stage.widthProperty().addListener((obs, oldWidth, newWidth) -> ajustarFonte(stage));
stage.heightProperty().addListener((obs, oldHeight, newHeight) -> ajustarFonte(stage));
System.out.println(stage.getWidth()+"  "+stage.getHeight());
}

private void ajustarFonte(Stage stage) {
double width= stage.getWidth();
double height= stage.getHeight();

// Escala de acordo com a janela atual, considerando 400x800 como base
double scaleWidth = width/ 360.6;
double scaleHeight = height / 677.0;

double novaFonteResultado = Math.max(FONT_MIN_SIZE_RESULTADO, FONT_MIN_SIZE_RESULTADO * Math.min(scaleWidht, scaleHeight));
double novaFonteReview = Math.max(FONT_MIN_SIZE_REVIEW, FONT_MIN_SIZE_REVIEW * Math.min(scaleWidht, scaleHeight));

resultadoTexto.setStyle("-fx-font-size: " + novaFonteResultado + "px;");
reviewTexto.setStyle("-fx-font-size: " + novaFonteReview + "px;");
}
Надеюсь, я выразился достаточно ясно, но если нет, все, что мне нужно, это чтобы VBox с обеими метками соответствовал размеру окна при изменении размера:
Нормальный размер
Размер изменен (см., что метки стали немного ниже)

Подробнее здесь: https://stackoverflow.com/questions/790 ... -font-size
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»