如何在JTextPane[java]中将颜色更改为特定符号

如何在JTextPane[java]中将颜色更改为特定符号,java,swing,jtextpane,jdk1.6,Java,Swing,Jtextpane,Jdk1.6,我正在尝试制作一个JTextPane,其中包含一种文本编辑器,其中特定的单词或符号具有不同的前景色或字体。 到目前为止,我找到了将颜色更改为文字的方法,如下所示: import javax.swing.*; import java.awt.*; import javax.swing.text.*; public class Test extends JFrame { private int findLastNonWordChar(String text, int index) {

我正在尝试制作一个JTextPane,其中包含一种文本编辑器,其中特定的单词或符号具有不同的前景色或字体。 到目前为止,我找到了将颜色更改为文字的方法,如下所示:

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();
    }
}
import javax.swing.*;
导入java.awt.*;
导入javax.swing.text.*;
公共类测试扩展了JFrame{
私有int findLastNonWordChar(字符串文本,int索引){
而(--index>=0){
如果(String.valueOf(text.charAt(index)).matches(“\\W”)){
打破
}
}
收益指数;
}
私有int findFirstNonWordChar(字符串文本,int索引){
while(索引
检查此示例(从以前的帖子中选取):

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);
}