Quelle est la différence entre une police intégrée et une police tierce pour Java?


Essayer de comprendre ce qui peut être un bogue dans le code pour MultiLineLabel trouvé ici: http://samuelsjoberg.com/archive/2009/10/multiline-labels-in-swing

Essentiellement, cet échantillon fonctionnera très bien avec, disons, Arial. Mais si j'installe une police personnalisée sur mon Mac, comme ITCKorinna-Bold, elle rend toujours le MultiLineLabel, mais elle n'ajoute aucun saut de ligne, donc "C'est un long de la ligne."devient "C'est ..."

Author: mKorbel, 2012-05-21

1 answers

Sous Linux avec OpenJDK 7 update 19, cela fonctionne très bien. Vous n'avez pas fourni votre code, il est donc difficile pour nous de voir s'il pourrait y avoir quelque chose de mal à cela.

Lorsque je modifie l'exemple pour utiliser Roboto, les sauts de ligne fonctionnent comme prévu.

Je ne sais pas quel runtime Java vous utilisez mais si vous utilisez celui fourni par Apple, il peut y avoir une différence dans les valeurs renvoyées par l'objet FontMetrics (puisque le runtime Java d'Apple rend les polices différentes puis par exemple OpenJDK sur Linux). Je suggère d'essayer OpenJDK et voir si cela fait une différence ou d'exécuter votre application sur une plate-forme différente et de voir si cela fait une différence.

    Font robotoFont = null;
    try {
        robotoFont = Font.createFont(Font.TRUETYPE_FONT, new File("/usr/share/fonts/roboto/Roboto-Black.ttf"));
        robotoFont = robotoFont.deriveFont(14f);
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Using the MultiLineLabel class.
    final MultiLineLabel mLabel = new MultiLineLabel(
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
                    + "Phasellus non sapien quam. Fusce posuere, nisl "
                    + "vitae tristique volutpat, augue erat faucibus nisl, "
                    + "nec venenatis metus sem vel enim. Cras in libero "
                    + "sapien, vitae euismod neque. Proin hendrerit, odio "
                    + "et faucibus suscipit, eros tellus blandit justo, "
                    + "ac cursus risus elit ut risus.");
    mLabel.setForeground(Color.WHITE);
    mLabel.setFont(robotoFont);

entrez la description de l'image ici

 0
Author: Jasper Siepkes, 2013-04-27 10:47:16