2016-03-19 71 views
1

我正在试图制作一个JTextPane,其中包含一种文本编辑器,其中特定的单词或符号具有不同的前景颜色或字体。 到目前为止,我发现改变颜色,以文字的方式,像这样:如何将颜色更改为JTextPane中的特定符号[java]

import javax.swing.*; 
import java.awt.*; 
import javax.swing.text.*; 

public class Test extends JFrame { 

    private int findLastNonWordChar(String text, int index) { 
     while (--index >= 0) { 
      if (String.valueOf(text.charAt(index)).matches("\\W")) { 
       break; 
      } 
     } 
     return index; 
    } 

    private int findFirstNonWordChar(String text, int index) { 
     while (index < text.length()) { 
      if (String.valueOf(text.charAt(index)).matches("\\W")) { 
       break; 
      } 
      index++; 
     } 
     return index; 
    } 

    public Test() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(400, 400); 
     setLocationRelativeTo(null); 

     final StyleContext cont = StyleContext.getDefaultStyleContext(); 
     final AttributeSet attr = cont.addAttribute(cont.getEmptySet(), StyleConstants.Foreground, Color.RED); 
     final AttributeSet attrBlack = cont.addAttribute(cont.getEmptySet(), StyleConstants.Foreground, Color.BLACK); 
     DefaultStyledDocument doc = new DefaultStyledDocument() { 
      private static final long serialVersionUID = 1L; 

      @Override 
      public void insertString(int offset, String str, AttributeSet a) throws BadLocationException { 
       super.insertString(offset, str, a); 

       String text = getText(0, getLength()); 
       int before = findLastNonWordChar(text, offset); 
       if (before < 0) { 
        before = 0; 
       } 
       int after = findFirstNonWordChar(text, offset + str.length()); 
       int wordL = before; 
       int wordR = before; 

       while (wordR <= after) { 
        if (wordR == after || String.valueOf(text.charAt(wordR)).matches("\\W")) { 
         if (text.substring(wordL, wordR).matches("(\\W)*(private|public|protected)")) { 
          setCharacterAttributes(wordL, wordR - wordL, attr, false); 
         } else { 
          setCharacterAttributes(wordL, wordR - wordL, attrBlack, false); 
         } 
         wordL = wordR; 
        } 
        wordR++; 
       } 
      } 

     }; 
    } 

    public static void main(String args[]) { 
     new Test(); 
    } 
} 

我的问题是,当颜色的符号“ - >”应该改变。事实上,如果我把' - >'而不是'私人'或'公共'不起作用。 你能帮我找到一种方法吗?感谢

回答

0

检查这个样本(从以前的帖子回升):

public static void main(String[] args) { 
    JTextPane jtp = new JTextPane(); 
    StyledDocument doc = jtp.getStyledDocument(); 

    Style style = jtp.addStyle("Red coloured text", null); 
    StyleConstants.setForeground(style, Color.red); 

    try { doc.insertString(doc.getLength(), "Style text",style); } 
    catch (BadLocationException e){} 

    StyleConstants.setForeground(style, Color.blue); 

    try { doc.insertString(doc.getLength(), "Style text 2",style); } 
    catch (BadLocationException e){} 

    JFrame frame = new JFrame("ColourCheck"); 
    frame.getContentPane().add(jtp); 
    frame.pack(); 
    frame.setVisible(true); 
} 
相关问题