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

Interfaces Graphiques en Java Discussion :

Afficher des symboles musicaux


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut Afficher des symboles musicaux
    Salut à tous,
    je voulais savoir si on pouvait faire de l'unicode en java
    En effet je voudrais écrire des symboles musicaux (par exemple clé de sol,note...).
    Sur http://fr.wikipedia.org/wiki/Unicode, ils disent que l'on peut en faire,je cite :
    "De même, le langage Java ne dispose pas de type unitaire permettant de coder un seul point de code d’une valeur quelconque (le type natif char est un entier positif sur 16 bits seulement). Pour manipuler les caractères normalisés hors du premier plan, il faut utiliser une paire de codets, chacun contenant une valeur égale aux deux codets définis par la forme UTF-16. Aussi les types d’objets String ou char[2] sont les plus appropriés pour représenter un caractère Unicode. Depuis Java 1.4.1, la bibliothèque standard fournit un support complet d’Unicode grâce au type natif int (qui est un entier défini sur 32 bits) et aux méthodes statiques de la classe standard Char (cependant un objet instancié de ce type Char ne permet pas, tout comme le type natif char, de stocker n’importe quel point de code)."

    Mais je n'ai pas réussi à en afficher.
    merci d'avance...

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Est-ce qu' au moins quelqu'un pourrait me dire si l'information de wikipedia n'est pas erronée ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par atha2
    Salut à tous,
    je voulais savoir si on pouvait faire de l'unicode en java
    En effet je voudrais écrire des symboles musicaux (par exemple clé de sol,note...).
    Sur http://fr.wikipedia.org/wiki/Unicode, ils disent que l'on peut en faire,je cite :
    "De même, le langage Java ne dispose pas de type unitaire permettant de coder un seul point de code d’une valeur quelconque (le type natif char est un entier positif sur 16 bits seulement). Pour manipuler les caractères normalisés hors du premier plan, il faut utiliser une paire de codets, chacun contenant une valeur égale aux deux codets définis par la forme UTF-16. Aussi les types d’objets String ou char[2] sont les plus appropriés pour représenter un caractère Unicode. Depuis Java 1.4.1, la bibliothèque standard fournit un support complet d’Unicode grâce au type natif int (qui est un entier défini sur 32 bits) et aux méthodes statiques de la classe standard Char (cependant un objet instancié de ce type Char ne permet pas, tout comme le type natif char, de stocker n’importe quel point de code)."

    Mais je n'ai pas réussi à en afficher.
    merci d'avance...

    Je ne sais pas pour la version 1.4, mais dans la ver1.5 c'est du tout Unicode.
    http://java.sun.com/j2se/1.5.0/docs/...Character.html
    http://java.sun.com/j2se/1.5.0/docs/...ng/System.html

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    En faite, j'aurais besoin d'afficher des charctère comme \u1D120 (la clé de sol) mais la console affiche un point d'interrogation suivie d'un 0("?0"). Est-ce qu'il existe un composant qui support ce type de charartère. Est-ce que ma version de java n'est pas bonne(5.0)?
    Est-ce quelqu'un peut m'aider s'il vous plait ?

  5. #5
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par atha2
    En faite, j'aurais besoin d'afficher des charctère comme \u1D120 (la clé de sol) mais la console affiche un point d'interrogation suivie d'un 0("?0"). Est-ce qu'il existe un composant qui support ce type de charartère. Est-ce que ma version de java n'est pas bonne(5.0)?
    Est-ce quelqu'un peut m'aider s'il vous plait ?
    La console, à ma connaissance, ne gère pas l'unicode.

    Pour afficher un caractère unicode particulier en Java, il est plus simple de passer par un composant graphique Swing.

    Il te faut une police de caractère affichant correctement le caractère voulu. Après tu spécifie ton composant de manière à l'utiliser avec cette police de caractère et en toute logique ça devrait marcher.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    merci d'avoir répondu mais j'ai toujour un problème J'utilise une police spécial
    "Musical.ttf" et pour créer ma Font, je fait un glisser/deposer du fichier de font dans le package de ma class(je suis sous eclipse) et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    protected void paintComponent(Graphics g) {
                            // TODO Auto-generated method stub
                            super.paintComponent(g);
                            Font test = null;
                            try {
                                test = Font.createFont(Font.TRUETYPE_FONT, new File("Musical.ttf"));
                            } catch (FontFormatException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            g.setFont(test);
                            //g.setColor(Color.BLACK);
                            g.drawString("azetrgfrt", 10, 50);                        
                        }
    et la j'ai une exception de déclenché :
    java.io.IOException: Can't read Musical.ttf
    Que vaut'il faire je travail sous Windows(shame on me) et je ne peut pas modifier les droits d'accès. Mais peut-être est-ce le format qu'il ne reconnait pas je ne sais plus quoi faire.
    AU SECOURS !!!!!!!!!!!!!!!!!

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Essaies de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Font f = Font.createFont(Font.TRUETYPE_FONT,getClass().getCLassLoader().getRessourceAsStream("Musical.ttf"));
    Par contre ceci estr à banir de ta méthode paintComponent: as tu vraiment envie d'avoir des perfs mauvaise et d'instancier ta Font à chaque fois que ton composant est redessiné...

    Charges la plutôt une bonne fois pour toute dans le constructeur de ta classe
    ++

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    j'obtiens une exception à l'execution:
    java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:134)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:254)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
    at java.awt.Font$1.run(Font.java:730)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Font.createFont(Font.java:716)
    at test.Test.<init>(Test.java:17)
    at test.Test$1.<init>(Test.java:35)
    at test.Test.main(Test.java:33)

    Si quelqu'un voit d'où cela peut venir ça m'arrangerait beaucoup...

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dès fois, tu n'aurais pas un problème de casse sur ton fichier (genre extension en majuscule ou autre connerie...)

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    A vrai dire non; je poste mon code pour voir si quelqu'un remarque une erreur.(Il n'y a aucune erreur à la compilation et à l'execution l'erreur à lieu lors de l'essai de chargement de la police.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public class Test extends JPanel{
        private Font f;
        public Test(){
            try {
                InputStream str = getClass().getClassLoader().getResourceAsStream("Musical.ttf");
                f = 
                    Font.createFont(
                            Font.TRUETYPE_FONT,
                            str);            
            } catch (FontFormatException e) {           
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }       
        }//constructeur
        public static void main(String[] args) {
            new JFrame(){
                {
                    add(new Test());
                    setSize(400,300);
                    setVisible(true);
                }
            };
        }//main
     
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setFont(f);g.drawString("Z azertrytyuiopmlkjgfdsq AZEZETRYUPMLJHGFDSQCXVBN1234567890&é'(-è_ç",
                    10, 50);                        
        }//paint
    }
    remarque:la police est telechargeable sur internet:
    google ->Musical.ttf

  11. #11
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Pour ma part j'ai pu charger cette police sans difficulte ; verifie quand meme que le fichier est bien sur le CLASSPATH. A noter que dans cette police, il n'y a pas de glyphes pour les lettres ; uniquement les notes de musiques et donc que ton test de rendu ne donne que des gros carres. J'ai egalement teste le chargement en installant cette police comme une police systeme avec les meme resultats.

    Pour trouver les codes des glyphes des notes et autres (ils sont vers la fin, 0xF0XX), tu peux utilise la demo demo/jfc/Font2DTest fournie dans le JDK ou eventuellement la table des caracteres de Windows (il semble cependant que Windows se base plutot sur l'ordre des glyphes que leur reel code Unicode).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package test;
     
    import java.awt.*;
    import java.awt.font.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.swing.*;
     
    public class TestMusicFont extends JPanel {
      private Font f1 = new Font("Dialog", Font.PLAIN, 25);
      private Font f2;
      private Font f3 = new Font("MusicalSymbols", Font.PLAIN, 25); //When installed as a system font.
     
      public TestMusicFont() {
        try {
          InputStream str = getClass().getClassLoader().getResourceAsStream("Musical.ttf");
          try {
            f2 = Font.createFont(Font.TRUETYPE_FONT, str);
            f2 = f2.deriveFont(Font.PLAIN, 25f);
          }
          finally {
            str.close();
          }
        }
        catch (FontFormatException e) {
          e.printStackTrace();
        }
        catch (IOException e) {
          e.printStackTrace();
        }
      } //constructeur
     
      public static void main(String ...args) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new TestMusicFont(), BorderLayout.CENTER);
            //frame.setSize(400, 300);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            frame.setVisible(true);
          }
        });
      } //main
     
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Insets insets = getInsets();
        Dimension size = getSize();
        int width = size.width - (insets.left + insets.right);
        int height = size.height - (insets.top + insets.bottom);
        Graphics2D g2d = (Graphics2D) g.create(insets.left, insets.top, width, height);
        try {
          g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
          g2d.setFont(f1);
          g2d.drawString("Z azertrytyuiopmlkjgfdsq AZEZETRYUPMLJHGFDSQCXVBN1234567890&é'(-è_ç", 10, 50);
          g2d.setFont(f2);
          g2d.drawString("Z azertrytyuiopmlkjgfdsq AZEZETRYUPMLJHGFDSQCXVBN1234567890&é'(-è_ç", 10, 100); // Render squares.
          g2d.setFont(f3);
          g2d.drawString("Z azertrytyuiopmlkjgfdsq AZEZETRYUPMLJHGFDSQCXVBN1234567890&é'(-è_ç", 10, 150); // Render squares.
          //
          g2d.setFont(f1);
          g2d.drawString("\uF026\uF08D\uF082\uF0C4\uF0E5\uF0A7", 10, 200);
          g2d.setFont(f2);
          g2d.drawString("\uF026\uF08D\uF082\uF0C4\uF0E5\uF0A7", 10, 250);
          g2d.setFont(f3);
          g2d.drawString("\uF026\uF08D\uF082\uF0C4\uF0E5\uF0A7", 10, 300);
        }
        finally {
          g2d.dispose();
        }
      } //paint
    }
    Images attachées Images attachées  
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Ton programme marche chez moi pour F3(la police MusicalSymbol installlé dans l'OS)mais je n'arrive toujours pas à charger F2 .En effet j'ai besoin quelle soit contenu dans le jar donc il faut que je puisse la chargée comme ressources.
    le classpath contient ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" path=""/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="output" path=""/>
    </classpath>
    mais je ne m'y connait pas du tout en xml donc je ne sais pas ce que ça signifie et si il faut le modifier pour ajouter la source de ma font.
    Si quelqu'un pouvais me guider...

    PS : a quoi ça sert Graphics2D ?

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    après un ultime bidouillage ça marche chez moi j'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     InputStream str = getClass().getClassLoader().getResourceAsStream("Musical.ttf");
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     InputStream str = getClass().getResourceAsStream("Musical.ttf");
    et là ça marche je ne sais pas pourquoi.
    A quoi sert getClassLoader() ? J'aimerais bien le savoir...

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    étonnant puisque cette méthode délègue au ClassLoader mais d'après la doc dans certaines conditions elle délègue à ClassLoader.getSystemResourceAsStream(). C'est peut-être ce qui se passe ici.

    Comme sa javadoc l'indique le ClassLoader est chargé de la résolution et du chargement des classes lorsqu'elles sont appellées dynamiquement lors de l'éxécution du code. L'ensemble fonctionne avec le CLASSPATH et permet également de charger les ressources qui s'y trouvent (bundles, images, etc...). getClassLoader() retourne le ClassLoader associé à la classe, le plus souvent c'est celui par défaut (il t'es possible d'en créer un pour éffectuer des résolution de CLASSPATH et des chargements de données personalisés).
    Voir la javadoc pour plus de détails.

    Essaie quand même de voir si le JAR fonctionne sur un ordi qui n'a pas la police d'installée pour être bien sur que ca fonctionne partout.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    je verifirais tout ça plus tard.
    En tous cas je tient à remercier tout ceux qui m'ont permis de résoudre ce petit problème

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/11/2014, 18h24
  2. Résultat de requête affiche des symboles en chinois
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 04/12/2009, 14h52
  3. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  4. [Sybase] Définition des symboles
    Par SoaB dans le forum Sybase
    Réponses: 5
    Dernier message: 19/03/2003, 23h06
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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