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

Composants Java Discussion :

[JTextArea] Soulignage de parentheses


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Par défaut [JTextArea] Soulignage de parentheses
    Bonjour a tous,
    Je fais un editeur de formule mathematique et comme elle peut etre tres longue, il serait preferable que l utilisateur puisse voir a quelle parenthese correspond telle autre. J ai donc deja fait une fonction qui me renvoie la position dans la String de la parenthese correspondante. Maintenant, il me reste a l'entoure comme le fait mon gentil editeur JAVA.
    Mais alors la probleme, je ne vois pas comment obtenir les coordonnees de la parenthese en question pour dessiner un rectangle dessus. En faite je trouve mais JAVA me genere son exception preferee NullPointerException ...
    Voila mon code, si quelqu un pouvait me dire ce qui ne va pas cela m'aiderai beaucoup.

    donc txtFormula est un JTextArea, je deplace d abord le Caret sur la nouvelle parenthese qui est envoye en parametre, ensuite je dessine autour un rectange de la taille d'une parenthese.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     private void paintBracketHighlight(Point pos)
            {
                    int c = txtFormula.getCaretPosition();
                    txtFormula.setCaretPosition(pos);
                    Graphics gfx=txtFormula.getGraphics();
                    FontMetrics fm=txtFormula.getFontMetrics(txtFormula.getFont());
     
                    gfx.setColor(txtFormula.getCaretColor());
                    gfx.drawRect(pos.x,pos.y,fm.charWidth('(') - 1,
                            fm.getHeight() - 1);
                     txtFormula.setCaretPosition(c);
            }
    Merci beaucoup

    Jerome

  2. #2
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    bonjour,

    tu peux savoir quel objet n'est pas initialisé avec la ligne de l'erreur.
    Tu aurais dû indiquer quelle ligne lance l'exception.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Par défaut
    Mince, le code que j ai donne n est pas correct, c un melange entre l ancien et le nouveau.

    voici le vrai 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
     
     private void paintBracketHighlight(int pos)
            {
                    int c = txtFormula.getCaretPosition();
                    txtFormula.setCaretPosition(pos);
                    Point newPos=txtFormula.getCaret().getMagicCaretPosition();
                    Graphics gfx=txtFormula.getGraphics();
                    FontMetrics fm=txtFormula.getFontMetrics(txtFormula.getFont());
     
                    gfx.setColor(txtFormula.getCaretColor());
                    gfx.drawRect(newPos.x,newPos.y,fm.charWidth('(') - 1,
                            fm.getHeight() - 1);
                     txtFormula.setCaretPosition(c);
            }
    Evidemment si je mets moi meme des erreurs ...
    Sinon la ligne qui genere l exception est celle avec le getMagicCaretPosition() apparemment il ne get rien du tout.

  4. #4
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    re,

    je ne pense pas que ce soit getMagicCaretPosition().

    Fait des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("nomVar : "+nomVar);
    Tu trouveras facilement quel objet est null.
    Vérifie le bien pour chaque objet (même le caret).

  5. #5
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Par défaut
    re,

    Natuellement j avais commence par chercher d ou venait l exception et jai le regret de te confirmer qu elle vient bel et bien de getMagicCaretPosition() ... J obtiens le bon Caret avec la methode precedent mais pas moyen d avoir sa position ...
    Tu aurai une idee pourquoi ou quelle autre methode utiliser ?

    Merci Yann,

    Jerome

  6. #6
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    C'est étrange, la doc ne dit pas que getMagicCaretPosition() peut renvoyer null !!!

    Ton TextField est bien affiché quand tu fais l'appel à la méthode ?
    son Caret aussi ?

  7. #7
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 8
    Par défaut
    Oui tout est bien afficher, j arrive a acceder facilement au Caret, mais en faite j ai changer de methode car je n arrivait pas faire fonctionner celle la, j'utilise modelToView(pos) qui me renvoie un rectangle, ca marche bien pour un cote mais pas pour l autre je suis dessus, je pense que le probleme vient de l argument que j envoie pos ... Quoi qu il en soit le probleme sur l affichage est grosomodo regle je te remercie, voici ma solution si qqn un jour se retrouve avec le meme probleme

    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
     
    private void paintBracketHighlight(int pos)
            {
     
                    System.out.println("Position is: "+pos);
                    Graphics gfx=txtFormula.getGraphics();
                    FontMetrics fm=txtFormula.getFontMetrics(txtFormula.getFont());
     
            try {
                Rectangle rect=txtFormula.modelToView(pos);
                gfx.setColor(txtFormula.getCaretColor());
                    gfx.drawRect(rect.x,rect.y,fm.charWidth('(') - 1,
                           fm.getHeight() - 1);
            } catch (BadLocationException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
     
            }

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

Discussions similaires

  1. Problème de synchronisation dans un JTextArea
    Par wutang dans le forum Composants
    Réponses: 3
    Dernier message: 21/06/2004, 16h06
  2. [swing]Centrage du texte d'un JTextArea
    Par Lezoul dans le forum Composants
    Réponses: 3
    Dernier message: 15/06/2004, 16h07
  3. Insérer de texte sans un JtextArea
    Par OxN dans le forum Débuter
    Réponses: 7
    Dernier message: 11/06/2004, 13h16
  4. [JTextArea] Empecher l'ecriture
    Par Longrais dans le forum Composants
    Réponses: 6
    Dernier message: 13/05/2004, 15h10
  5. [JTextArea]changer dynamiquement le nombre de colonnes
    Par MrDuChnok dans le forum Composants
    Réponses: 9
    Dernier message: 27/04/2004, 14h31

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