相关代码如下:
private void  setColor(){
     String input = jTextPane.getText();
        String patternStr = "Str";
        String patternArr = "Array";
        
        Pattern pattStr = Pattern.compile(patternStr);
        Pattern pattArr = Pattern.compile(patternArr);
        Matcher mtStr=pattStr.matcher(input);
        Matcher mtArr=pattArr.matcher(input);
        if(mtStr.find()){
          int indexStr = text.indexOf(patternStr );
          while (indexStr <= text.lastIndexOf(patternStr)) {            setTextColor(jTextPane, text.indexOf(patternStr, indexStr), patternStr.length(),
                         Color.RED);
            indexStr += 1;          }
        }
       if(mtArr.find()){
          int indexArr = text.indexOf(patternArr );
          while (indexStr <= text.lastIndexOf(patternArr )) {            setTextColor(jTextPane, text.indexOf(patternArr, indexStr), patternArr.length(),
                         Color.BLUE);
            indexStr += 1;          }
        }
        jTextPane.updateUI();   } 
  private void setTextColor(final JTextPane sourcePane,
                              final int startPos, final int length, final Color color) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                javax.swing.text.MutableAttributeSet attr = new javax.swing.text.SimpleAttributeSet();
                javax.swing.text.StyleConstants.setForeground(attr, color);                if (length > 0) {
                    javax.swing.text.StyledDocument doc = (javax.swing.text.StyledDocument) sourcePane.getDocument();
                    doc.setCharacterAttributes(startPos, length, attr, false);                }              }
            });    }

解决方案 »

  1.   

    不好意思,上面有的地方改错了
    private void  setColor(){
                String input = jTextPane.getText();
            String patternStr = "Str";
            String patternArr = "Array";        Pattern pattStr = Pattern.compile(patternStr);
            Pattern pattArr = Pattern.compile(patternArr);
            Matcher mtStr=pattStr.matcher(input);
            Matcher mtArr=pattArr.matcher(input);
            if(mtStr.find()){
              int indexStr = input.indexOf(patternStr );
              while (indexStr <= input.lastIndexOf(patternStr)) {            setTextColor(jTextPane, input.indexOf(patternStr, indexStr), patternStr.length(),
                             Color.RED);
                indexStr += 1;          }
            }
           if(mtArr.find()){
              int indexArr = input.indexOf(patternArr );
              while (indexArr <= input.lastIndexOf(patternArr )) {            this.setTextColor(jTextPane, input.indexOf(patternArr, indexArr), patternArr.length(),
                             Color.BLUE);
                indexArr += 1;          }
            }
            jTextPane.updateUI();   }
       private void setTextColor(final JTextPane sourcePane,
                                  final int startPos, final int length, final Color color) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    javax.swing.text.MutableAttributeSet attr = new javax.swing.text.SimpleAttributeSet();
                    javax.swing.text.StyleConstants.setForeground(attr, color);                if (length > 0) {
                        javax.swing.text.StyledDocument doc = (javax.swing.text.StyledDocument) sourcePane.getDocument();
                        doc.setCharacterAttributes(startPos, length, attr, false);                }              }
                });    }
      

  2.   

    我想在文字匹配的最后结束位置,再setTextColor到默认颜色就可以了吧