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

Signaler
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
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

Messages postés
750
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
23 décembre 2008
19
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
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
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