2010-03-02 3 views
2

J'ai un JTextPane et je suis capable de modifier le style d'une portion de texte à l'intérieur.Comment définir le style du texte sur le point d'être saisi dans un JTextPane

En supposant que rien dans le JTextPane n'est sélectionné, je voudrais pouvoir modifier le style d'une partie qui n'y est pas encore, c'est-à-dire, définir le style que l'utilisateur va taper ensuite .

L'utilisation de setCharacterAttributes (start, length, style, attributeSet, replace) avec length = 0 ne semble pas le faire.

Répondre

4

Si vous définissez un DocumentFilter sur le document du volet de texte (en supposant que vous utilisez une sous-classe AbstractDocument, qui a la méthode setDocumentFilter), vous pouvez ajouter l'attribut définit le texte lorsqu'il est inséré ou remplacé.

Edit:

Comme un exemple rapide, ceci est une implémentation de la méthode replace dans un DocumentFilter qui transforme le texte en rouge lorsque l'utilisateur tape un 'a':

public void replace(FilterBypass fb, int offset, int length, 
    String text, AttributeSet attrs) throws BadLocationException 
{ 
    if (text.startsWith("a")) 
    { 
    SimpleAttributeSet newAttrs = new SimpleAttributeSet(); 
    StyleConstants.setForeground(newAttrs, Color.RED); 
    attrs = newAttrs; 
    } 

    super.replace(fb, offset, length, text, attrs); 
} 
1

essayer ceci:

doc.setCharacterAttributes(0, doc.getLength() + 1, attributeSet, false); 
+1

Cela changerait le style de l'ensemble du document, ce qui n'est pas ce que je veux. Je veux seulement changer le style du personnage sur le point d'être tapé. –

Questions connexes