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

AWT/Swing Java Discussion :

JTextPane comment personnaliser l'affichage de certains mots ?


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut JTextPane comment personnaliser l'affichage de certains mots ?
    Bonjour,

    J'essaie de mettre en place de la coloration syntaxique sur ma JTextPane.
    J'ai réussi à faire ce que je voulais mais je n'arrive pas à personnaliser mon HighLighter.
    Actuellement j'utilise le DefaultHighlighter.DefaultHighlightPainter qui ne fait que surligner les mots que j'ai choisit dans la méthode addHighlight.

    Moi j'aimerai que certains mot soit en gras et en bleu. Je suppose qu'il faut faire un héritage sur un Highlighter mais lequel et quel attributs changer ?
    Merci de votre réponse.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    J'ai abandonnée les HighLighter vu le peu d'info dessus.

    Je me suis donc intéressé à setCharacterAttributes d'un StyledDocument.

    Le problème c'est que quand je l'exécute, il me sort une illégall exception.
    J'ai trouvé une solution sur internet :
    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
     
    // Ma regex
    final int start = m.start();
    final int end = m.end();
    final MutableAttributeSet style = attri;
    final StyledDocument doc = textArea.getStyledDocument();
    SwingUtilities.invokeLater(new Runnable()
    {
    	private final int int_start = start;
    	private final int int_end = end;
    	private final MutableAttributeSet int_style = style;
    	private final StyledDocument int_doc = doc;
    	public void run()
    	{
    		int_doc.setCharacterAttributes(int_start, (int_end-int_start), int_style, false);
    	}
    });

    Déjà pourquoi doit ont faire un InvokeLater pour que ça fonctionne ?
    Et je dois mettre en place plein de variable final pour pas qu'elle soit écrasé par le nouveau thread.

    Est-ce la bonne vois pour colorer du text sachant que cette méthode est appelé à chaque caractère tapé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    textPane.getDocument().addDocumentListener(new DocumentListener() {
    public void insertUpdate(DocumentEvent de) {
    	new MyHighlight(textPane);
    }
     
    public void removeUpdate(DocumentEvent de) {
    	new MyHighlight(textPane);
    }
     
    public void changedUpdate(DocumentEvent de) {
    	//new MyHighlight(textPane);
    }
    });

  3. #3
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Je ne saurais pas te répondre... mais juste te signaler que dans les composants Swing, tu peux utiliser du code HTML, ce qui est pratique pour les couleur entre autre.

    Après je ne sais pas si cela peut t'aider...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Oui mais un outil existe pour le faire (StyledDocument) alors pourquoi s'en priver ?

    Autre problème avec le code actuel, si je fais un Ctrl+V, il colore bien les mots que j'ai définit. Mais si je supprime tout le texte et que je refait Ctrl+V, il colore tout les mots sans se soucier des conditions. Comme si il avait pas nettoyé le style précédent...

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Merci mais je cherche à le faire moi même.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    personne ne peux m'aider ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/08/2014, 23h02
  2. Réponses: 10
    Dernier message: 06/04/2014, 15h38
  3. Réponses: 1
    Dernier message: 28/04/2011, 20h27
  4. Erreurs, warnings, comment personnaliser l'affichage?
    Par Sunsawe dans le forum Visual C++
    Réponses: 2
    Dernier message: 01/12/2008, 13h19
  5. Réponses: 2
    Dernier message: 18/12/2005, 22h10

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