2013-09-30 43 views
5

我正在嘗試在JTextPane中執行文本高亮顯示。我正在使用SwingWorker在後臺高亮顯示。但我無法獲得所需的輸出。
我的代碼如下:
主類:使用SwingWorker在JTextPane中語法高亮顯示

class MultiColor { 
    private static void displayGUI() { 
     final JTextPane ta = new JTextPane(); 
     JFrame frame = new JFrame("EXAMPLE"); 
     JButton jb = new JButton("Change"); 
     JScrollPane jsp = new JScrollPane(ta); 
     frame.add(jsp, BorderLayout.CENTER); 
     frame.add(jb, BorderLayout.PAGE_END); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
     jb.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       Modify mm = new Modify(ta); 
       mm.execute(); 
      } 
     }); 
    } 
    public static void main(String[] a) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       displayGUI(); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 

修改類是:

class Modify extends SwingWorker<Void,Object> { 
    private JTextPane ta; 
    private StyleContext style; 
    private AttributeSet textStyle; 
    public Modify(JTextPane text) { 
     ta = text; 
    } 
    private void matching(String str){ 
     style = StyleContext.getDefaultStyleContext(); 
     textStyle = style.addAttribute(style.getEmptySet(),StyleConstants.Foreground, Color.red); 
     textStyle = style.addAttribute(textStyle,StyleConstants.FontSize, 15); 

     String regx = "\\b(class|int|void|static|final|public|private|protected|float|if|else|for|while|try|catch|boolean|import|return)\\b"; 
     String input = str; 
     Pattern p = Pattern.compile(regx); 
     Matcher m = p.matcher(input); 
     while(m.find()) 
      ta.getStyledDocument().setCharacterAttributes(m.start(),(m.end() - m.start()),textStyle, false); 
    } 
    @Override 
    protected Void doInBackground() { 
     matching(ta.getText()); 
     return null; 
    } 
    @Override 
    protected void done() { 
    } 
} 

而且我的輸出是:

enter image description here

我想顯示指定文本樣式的所有關鍵字。
我將如何獲得所需的輸出。

+1

doInBackground是工作者線程,未指定更改Swing GUI中的任何內容,您需要使用publish()或setProcess – mKorbel

回答

4

似乎您的突出顯示偏移量已關閉。

請參閱Text and New Lines的可能原因和一個簡單的解決方案。