Récupérer un style appliqué sur un caractère dans un JTextPane
Bonjour a tous,
Je vous explique brièvement mon problème :
Avec l'IUT, nous devons faire un projet. Dans ce projet, je dois créer un éditeur de texte, en java, avec les fonctions basiques :
-gras, italic, souligné
-centrer, gauche, droite, justifier
-lien
-image
-taille et couleur police.
Alors voila mon problème : je n'arrive pas à récupérer le style que j'applique à un caractère.
Si c'était que ça, se serait trop simple comme problème. Non, en réalité, et je n'ai vraiment aucune idée du pourquoi du comment, mais des fois, cela marche, et des fois, non.
Je m'explique :
Quand l'utilisateur sélectionne une partie de texte et décide la mettre en gras ou autre, cela marche. Idem pour italic ou souligné. Quand il relique sur gras avec le même texte, et c'est la ou est mon problème, des fois, il enlève le mode gras (quand sa marche), et des fois non (quand sa marche pas). Et je ne comprend pas pourquoi. Alors je me suis dit que ça venait des caractères, du fait que je n'arrive pas à récupérerez style que je leur ai appliqué. Mais pourquoi cela ne me le fait pas tout le temps?
Je vous envoie le code pour essayez de voir d'ou vient mon erreur.
Encore une chose, puisque c'est un projet, il est difficile de vous fournir une version testable.
voici le code en question, la ou je traite mes styles:
Code:
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
|
this.document=textPaneTexte.getStyledDocument();
String textSelect = textPaneTexte.getSelectedText();
int position = this.textPaneTexte.getCaretPosition();
this.style=this.document.getLogicalStyle(textPaneTexte.getCaretPosition());
this.attributes = new SimpleAttributeSet(this.textPaneTexte.getCharacterAttributes());
System.out.println("avant update");
for (Enumeration en = this.attributes.getAttributeNames(); en.hasMoreElements() ;) {
System.out.println(en.nextElement());
}
if(e.getSource() == this.buttonTextBold) {
if(StyleConstants.isBold(this.attributes))
this.attributes.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
else
this.attributes.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
}
else if(e.getSource() == this.buttonTextItalic) {
if(StyleConstants.isItalic(this.attributes))
this.attributes.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
else
this.attributes.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);
}
else if(e.getSource() == this.buttonTextUnderline) {
if(StyleConstants.isUnderline(this.attributes))
this.attributes.addAttribute(StyleConstants.CharacterConstants.Underline, Boolean.FALSE);
else
this.attributes.addAttribute(StyleConstants.CharacterConstants.Underline, Boolean.TRUE);
}
else if(e.getSource() == this.comboBoxPolice) {
StyleConstants.setFontFamily(this.style, (String)this.comboBoxPolice.getSelectedItem());
}
else if(e.getSource() == this.comboBoxTailleTexte) {
StyleConstants.setFontSize(this.style, Integer.parseInt((String)this.comboBoxTailleTexte.getSelectedItem()));
}
this.textTampon = textSelect;
this.previousPosition = position;
this.textPaneTexte.setCharacterAttributes(attributes, true);
System.out.println("fin\napres update:");
for (Enumeration en = this.attributes.getAttributeNames(); en.hasMoreElements() ;) {
System.out.println(en.nextElement());
} |
Mes System.out... me servent a tester, a voir si mon attribut enregistre bien les différents style que j'applique a mes caractères.
Ce que je me demande, c'est pourquoi mon style n'est pas enregistrer, des fois...
Je vous demande pas de debugge,r car sans exemple, c'est impossible. Par contre, si vous pouviez me dire comment vous feriez, et comment faire, se serait vraiment génial.
N'hésitez pas a me dire si un truc vous manque. Merci d'avance.
Cordialement
Trouvé d'ou venait le bug !
Re-Bonjour,
Alors voila une petite explication supplémentaire à mon problème :
j'utilise la méthode getCharacterAttributes(), qui récupère le style appliqué à un caractère pour la position sélectionnée.
Mon problème, c'est que quand je sélectionne un texte de Gauche à Droite, je n'arrive pas appliquer plusieurs styles.
Par contre, quand je sélectionne de Droite à Gauche, là ça marche et je peux appliquer plusieurs styles à mon texte.
Comment cela se fait-il ?
Merci d'avance.