2013-09-30 2 views
5

का उपयोग कर जेटीक्स्टपेन में सिंटेक्स-हाइलाइटिंग मैं 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 श्रमिक धागा है, स्विंग जीयूआई में कुछ भी बदलने के लिए नामित नहीं है, आपको प्रकाशन() या setProcess का उपयोग करने की आवश्यकता होगी – mKorbel

उत्तर

4

ऐसा लगता है कि आपके हाइलाइटिंग ऑफ़सेट बंद हैं।

संभावित कारण और सरल समाधान के लिए Text and New Lines देखें।