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

cs_cbil 140 Messages postés mercredi 30 avril 2003Date d'inscription 15 mai 2008 Dernière intervention - 13 mai 2008 à 12:51 - Dernière réponse : cs_cbil 140 Messages postés mercredi 30 avril 2003Date d'inscription 15 mai 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
indiana_jules 750 Messages postés mardi 9 mars 2004Date d'inscription 23 décembre 2008 Dernière intervention - 13 mai 2008 à 13:23
3
Merci
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

Merci indiana_jules 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de indiana_jules
Meilleure réponse
cs_cbil 140 Messages postés mercredi 30 avril 2003Date d'inscription 15 mai 2008 Dernière intervention - 13 mai 2008 à 13:40
3
Merci
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

Merci cs_cbil 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_cbil

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.