IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème drawString avec Font exotique


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut Problème drawString avec Font exotique
    Bonjour,

    Dans mon applet je dessine des textes dans un Graphic2D.
    Tout va bien tant que la Font utilisée est "standard" (tahoma, arial ...)

    Par contre, si mon texte doit être écrit en Webdings et bien j'ai un beau carré !

    Après diverses recherches je pense a voir compris que cela vient des code unicode des caractères de mes textes.

    Je converti mes String avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private String getUnicode(String Montexte) 
    {
    String unicodeStr = "";
    char[] charArray = Montexte.toCharArray();
    for (int i = 0; i < charArray.length; i++) 
    {	
        	unicodeStr = unicodeStr + "\\u" + Integer.toHexString(charArray[i] | 0x10000).substring(1);	
    }
    return unicodeStr;
    }
    Mon problème est que les codes unicode de mes caractères se sont pas corrects.
    Je m'explique, je dois écrire la lettre 'b' en utilisant la Font Webdings" et cela doit donner un symbole représentant un vélo.

    Le code de ce symbole est \uf062 mais le code que me renvoie ma fonction est \u0062 et donc j'obtiens un beau carré dans mon applet.

    Avez vous un idée ?

    Merci beaucoup.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par sylverspoon Voir le message
    Dans mon applet je dessine des textes dans un Graphic2D.
    Tout va bien tant que la Font utilisée est "standard" (tahoma, arial ...)

    Par contre, si mon texte doit être écrit en Webdings et bien j'ai un beau carré !

    Après diverses recherches je pense a voir compris que cela vient des code unicode des caractères de mes textes.
    Plus exactement, la fonte webdings n'a pas de mapping unicode pour les caractères qu'elle contient. Or, Java ne peut afficher que les caractères mappés aux codes Unicodes demandés.
    Peut pas. Pas possible. Sauf à la rigueur en imaginant une bibliothèque JNI tierce qui servirait à contourner ce problème.

    La raison est qu'en principe, ces fontes ne servent pas à afficher un texte avec des dessins à la place des lettres (auquel cas elles auraient un mapping Unicode liant ces dessins aux lettres correspondantes,) mais à fournir des symboles spéciaux ne correspondant à aucun autre caractère que celui qu'il dessine. Ça se voit dans les WingDings, la plupart des caractères ayant un mapping Unicode. Mais pas dans Webdings, aucun caractère ne correspondant à un caractère Unicode. Si on demande à Java d'afficher le caractère smiley, il pourra le faire avec Wingdings parce que Wingdings a le caractère Unicode smiley. Webdings ne contient aucun caractère Unicode et Java ne peut rien en faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    Merci de votre réponse thelvin.

    C'est râlant car en mettant en dur dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    g2.drawString("\uf062", x,y);
    ...
    Le symbole souhaité s'affiche bien ...


    Il n'y a donc pas de moyen "d’obtenir" le code \uf062 en lieux et place de \u0062 ? En détectant la police ? si oui sur quel critère ?

    J'utilise déjà la méthode canDisplayUpTo(String str) de ma Font pour écarter les polices les plus fréquentes dans mon cas et qui ne posent pas problème.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ok, alors apparemment mes informations datent un peu.
    J'ignorais totalement que "\uf062" s'affiche bien en Java avec Webdings. C'est une utilisation intéressante de la zone Unicode à usage privé.

    voici comment tu peux transformer une String de caractères tapés sous Windows, en leur équivalent Webdings :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static char asciiToWindowsReserved(char ch) {
      return (char)(0xf000 + ch);
    }
     
    public static String asciiToWindowsReserved(String text) {
      char[] array = new char[text.length()];
      for(int i = 0; i < array.length; i++) {
        array[i] = asciiToWindowsReserved(text.charAt(i));
      }
      return new String(array);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    Mille mercis thelvin, cela fonctionne.

    J'ai essayé de "convertir" tous les texte que je dois afficher pour éviter le test canDisplayUpTo(String str) qui mais pour les polices "standard" cela ne fonctionne pas.

    Je vais essayer d'optimiser mon code pour améliorer les performances.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSS 3] Problème avec @font-face
    Par zoom61 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 27/01/2012, 08h30
  2. Problème avec font-face
    Par nanard74 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 19/11/2011, 18h42
  3. problème avec font normal
    Par adilou1981 dans le forum Flex
    Réponses: 4
    Dernier message: 28/08/2009, 11h46
  4. [Màj du problème] drawString avec une font differente.
    Par RadicalBob dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/06/2006, 10h30
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo