Comment connaître le style appliqué sur un texte d'un JTextPane (est-ce en gras,

Résolu
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 13 mai 2008 à 12:51
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 13 mai 2008 à 13:40
Bonjour,

J'aimerais savoir comment connaître le style qui est appliqué à un texte d'un JTextPane ?

J'ai compris comment appliquer un style (mise en gras par exemple) à une partie du texte du JTextPane mais je n'arrive pas à récupérer l'information "ce texte/caracteres/selection est en gras, italique..."

Pour mettre en gras (par exemple), j'écris le code suivant :

StyledDocument sd = this.getStyledDocument();   
StyleContext newContext = new StyleContext();
NamedStyle newStyle = newContext.new NamedStyle();
newStyle.addAttribute(StyleConstants.Bold,StyleConstants.Bold);

if(this.getSelectedText()!=null)
{
         
//mise en gras de la sélection
         for(int i=this.getSelectionStart();i==this.getSelectionEnd();i++)
         {
               sd.setLogicalStyle(i, newStyle);
         }   
}

Pour récupérer le style, j'ai regardé les méthodes de StyledDocument, Style, AttributeSet, Document, Element... aucune ne m'inspire pour pouvoir faire ça.
J'ai vu une réponse de JHelp  sur ce sujet là : http://www.javafr.com/infomsg_POSITION-CURSEUR-DANS-OBJET-JTEXTPANE_136907.aspx
mais ca ne marche pas chez moi. (le texte retourné est toujours "Defaut" - pas d'indicateur Bold, Italic...)





<hr />



En fait tu as la méthode getStyledDocument(), qui te renvoie le doucument entier avec le style.
(package java.swing.text)

StyledDocument document =monJTextPane.getStyledDocument();

Ensuite avec ce document tu récupere le style appliquer :

Style style=document.getLogicalStyle(positionDuCaractere);

ensuite tu recupéres le nom.

String nom=style.getName();

Et là :
if(nom.toLowerCase().indexOf("bold")>=0)
//c'est gras
if(nom.toLowerCase().indexOf("italic")>=0)
//c'est italic
...

JHelp







<hr />
pour moi, style.getName(); renvoie "defaut" tout le temps.

Savez-vous comment faire ?

Merci beaucoup.
A+
Cbil

2 réponses

indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
13 mai 2008 à 13:23
Salut,
peut-être qu'en passant par getAttributeNames, ou getAttribute de StyledDocument, tu pourrais avoir ce que tu cherches.

Voili voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
3
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
13 mai 2008 à 13:40
Merci....ca marche !

Voici mon code (mon this est un extends JTextPane) :

StyledDocument sd = this.getStyledDocument();
Style elt = sd.getLogicalStyle(this.getCaretPosition());

<hr />
Code correct :

StyleConstants.isBold(sd.getCharacterElement(this.getCaretPosition()).getAttributes())
<hr />

Cependant, j'avais testé ceci ^^ (0 erreur de syntaxe)

Code incorrect :

StyleConstants.isBold(elt); //retourne toujours false
ou
elt.getAttribute(StyleConstants.Bold) //retourne toujours false

Merci indiana_jules,
A+

Cbil
3
Rejoignez-nous