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 :

Caractères arabes dans TextArea


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 411
    Points : 2 060
    Points
    2 060
    Par défaut Caractères arabes dans TextArea
    Bonjour,

    Tout d'abord, je suis débutant en Java.

    J'ai réalisé, sans trop de difficultés en Perl, une interface de gestion de cours d'arabe qui me donne satisfaction au bémol près que si je clique dans la zone qui affiche le texte arabe (ScrolledText), celui-ci est complètement désorganisé.
    Visiblement le bug traîne depuis des lustres et ne sera pas corrigé dans un avenir proche.
    http://www.developpez.net/forums/d11...scrolled-text/

    Je fais quelques essais en Java pour voir ...
    Là lorsque j'écris dans un TextArea avec un clavier arabe, de petits carrés remplacent les caractères arabes. Autrement dit, là encore les caractères codés sur plusieurs octets ne passent pas.
    Voici le bout de code :
    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class ta_scroll{
        private JFrame f; //Main frame
        private JTextArea ta; // Text area
        private JScrollPane sbrText; // Scroll pane for text area
        private JButton btnQuit; // Quit Program
     
        public ta_scroll(){ //Constructor
            // Create Frame
            f = new JFrame("Swing Demo");
            f.getContentPane().setLayout(new FlowLayout());
     
            // Create Scrolling Text Area in Swing
            ta = new JTextArea("", 5, 20);
            ta.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);  
            // String Result = new String(ta.nextToken().getBytes("windows-1256"), "utf-8");
            // String str = new String("ßã".getBytes(), "UTF-8");
     
            Font font = new Font("Verdana", Font.BOLD, 18);
            ta.setFont(font);
            ta.setForeground(Color.BLUE);
            ta.setLineWrap(true);
            sbrText = new JScrollPane(ta);
            sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            // Create Quit Button
            btnQuit = new JButton("Quit");
            btnQuit.addActionListener(
                        new ActionListener(){
                            public void actionPerformed(ActionEvent e){
                                System.exit(0);         
                            }
                        }
                    );
        }
     
        public void launchFrame(){ // Create Layout
            // Add text area and button to frame
                f.getContentPane().add(sbrText);
            f.getContentPane().add(btnQuit);
     
            // Close when the close button is clicked
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Display Frame
            f.pack(); // Adjusts frame to size of components
            f.setVisible(true);
        }
     
        public static void main(String args[]){
            ta_scroll gui = new ta_scroll();
            gui.launchFrame();
        }
    }
    Juste une question : Peut-on sans trop de difficultés gérer un texte en arabe en Java, dans un TextaArea ? Éventuellement dans un autre langage ?
    Ça doit être possible, sur le web les pages de sites arabes s'affichent correctement.

    Merci d'avance pour votre aide.

    Le résultat en image :

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 411
    Points : 2 060
    Points
    2 060
    Par défaut
    Pardon ça fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Font font = new Font("Serif", Font.BOLD, 28);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Font font = new Font("Dialog", Font.BOLD, 28);
    Visiblement les caractères arabes n'ont pas été portés dans "Verdana"
    Quant à "Simplified Arabic" cela plante le programme avec :
    C:\Users\Michel\Documents\EssJava>java ta_scroll
    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000076d00895, pid=2956, tid=2012
    #
    # JRE version: 7.0-b147
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0-b17 mixed mode windows-amd64 compressed oops)
    # Problematic frame:
    # C [ntdll.dll+0x50895]
    #
    # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
    #
    # An error report file with more information is saved as:
    # C:\Users\Michel\Documents\EssJava\hs_err_pid2956.log
    #
    # If you would like to submit a bug report, please visit:
    # http://bugreport.sun.com/bugreport/crash.jsp
    #
    Alors que cette police est accessible dans Word et Perl.
    -font => '{Simplified Arabic} 26', # Arabe
    Dommage car c'est celle qui positionne les caractères diacritiques (accents) de façon bien visible.

    Je suis preneur de tout conseil pour migrer de Perl à Java.
    Entre autre je cherche l'équivalent de regex de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Lig =~ s/(\x{0627}\x{0644}\x{062A}[\x{064E}\x{0650}|\x{064F}])\x{0651}/$1/go; # Supprime Chadda \x{0651} sur ت \x062A
    Merci d'avance.

  3. #3
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    Bonjour,

    Essaye avec la dernière version de JRE 7.
    Sinon, sur une version 6 ça semble fonctionner normalement chez moi (je n'ai pas la 7 sous la main).

  4. #4
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 411
    Points : 2 060
    Points
    2 060
    Par défaut
    Merci Laurent.B pour ta réponse,

    Je suis en JRE 7 :
    C:\Users\Michel>java -version
    java version "1.7.0"
    Java(TM) SE Runtime Environment (build 1.7.0-b147)
    Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
    C'est quoi qui fonctionne chez toi la font "Simplified Arabic" et/ou "Verdana" ?

    Vu pour pour la balise 'quote' pardon et MERCI.

  5. #5
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    Oui, j'ai bien vu que tu étais en JRE 7, ça apparaît dans la trace mais par contre aucune révision n'est indiquée ("u" quelque chose"), donc il te faut installer la dernière révision du JDK, la 7u6.

    Ton plantage vient visiblement d'un bug qui a été corrigé en u1, cf. http://bugs.sun.com/bugdatabase/view...bug_id=7064302 trouvé en cherchant avec "Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0-b17 mixed mode windows-amd64 compressed oops)" dans Google.

    Ce n'est pas tant les caractères arabes que des histoires de dimensions de caractère je pense... enfin bref ! Ca devrait corriger ton problème.

    Ca fonctionne en Simplified Arabic mais pas en Verdana.

    Pour ce qui est de la regex, en Java c'est très similaire puisque le moteur de Java pour les regex est basé sur celui de Perl. Il faut doubler les anti-slash par contre '\' puisqu'en Java ce sont des caractères d'échappement.

    Cf. la Javadoc de Pattern http://docs.oracle.com/javase/7/docs...x/Pattern.html
    Les différences Perl/Java sont même indiquées.

  6. #6
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 411
    Points : 2 060
    Points
    2 060
    Par défaut
    MERCI Laurent.B
    Je n'imaginais pas que ce puisse être un pb de version, j'ai installé jdk-7-windows-x64.exe début août depuis le site d'Oracle.
    Avec jdk-7u6-windows-x64.exe c'est parfait !
    C:\Users\Michel\Documents\EssJava>java -version
    java version "1.7.0_06"
    Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
    Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)
    MERCI aussi pour l'info et surtout le lien sur les Pattern

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2009, 00h31
  2. saisie des caractéres arabe dans un jTextField
    Par RouRa22 dans le forum Composants
    Réponses: 12
    Dernier message: 08/09/2008, 10h57
  3. [MySQL] problème d'insertion des caractères arabe dans une base mysql
    Par sasaas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/03/2008, 12h56
  4. Problème de stockage des caractères arabe dans Mysql?
    Par merci_tous dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/04/2007, 13h21
  5. [Encoding] Comment stocker les caractères arabes dans un fichier XML?
    Par merci_tous dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 13/02/2007, 17h57

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