3 votes

Taille de la police JavaFX à partir de la largeur

Je veux calculer la taille de la police en fonction d'une valeur de largeur.

//Custom Font
Font.loadFont(Fonts.class.getResourceAsStream("/font/bignood/bignoodletoo.ttf"), 10)
String text = "Hello World";
Double width = 100;

Question similaire à Java AWT

Question similaire à Java AWT 2


Edit : Use case

Pensez à un bouton qui a un texte "PLAY MONEY"¹ . Maintenant je vais traduire le texte en PT_BR et il appelle maintenant "DINHEIRO FICTICIO"² . Comme vous pouvez le voir, le mot² est plus grand que le mot¹, donc si vous définissez le même Font Size alors tu vas voir DINHEIRO FIC... à l'intérieur du bouton.

Donc la mission ici est d'obtenir le width valeur de la Button obtenir le text et appliquer le Font Size pour faire tenir le texte complet à l'intérieur du Button chaque fois que je change le text .

5voto

Hugues M. Points 11750

Vous trouverez ci-dessous un findFontSizeThatCanFit() (et une démo) qui peut être utile pour cela.

( Voyez-le en action en ligne )

public class FxFontMetrics {
    public static void main(String[] args) {
        int maxWidth = 100;
        System.out.println("# Text -> Font size that can fit text under " + maxWidth + " pixels");
        Stream.of(
                "DINHEIRO FICTICIO",
                "Dinheiro ficticio",
                "PLAY MONEY",
                "Play money",
                "Devise factice qui compte pour du beurre")
                .forEach(text -> {
                    double size = findFontSizeThatCanFit(Font.font("dialog", 45), text, maxWidth);
                    System.out.println(text + " -> " + size);
                });
    }

    private static double findFontSizeThatCanFit(Font font, String s, int maxWidth) {
        double fontSize = font.getSize();
        double width = textWidth(font, s);
        if (width > maxWidth) {
            return fontSize * maxWidth / width;
        }
        return fontSize;
    }

    private static double textWidth(Font font, String s) {
        Text text = new Text(s);
        text.setFont(font);
        return text.getBoundsInLocal().getWidth();
    }
}

Il imprime :

# Text -> Font size that can fit text under 100 pixels
DINHEIRO FICTICIO -> 10.475703324808185
Dinheiro ficticio -> 12.757739986295396
PLAY MONEY -> 15.587183195068118
Play money -> 17.152428810720266
Devise factice qui compte pour du beurre -> 4.795354500327807

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X