2013-08-16 8 views
5

खोने के बाद टेक्स्ट पर हाइलाइटिंग दिखाना बंद कर देता है जब मेरा jTextArea फ़ोकस में है, तो यह टेक्स्ट हाइलाइटिंग की अनुमति देता है, लेकिन यह फोकस खोने पर टेक्स्ट चयन नहीं दिखाता है। क्या उपयोगकर्ता हाइलाइटिंग को प्रदर्शित करना जारी रखना संभव है भले ही उपयोगकर्ता संबंधित jFrame पर किसी अन्य घटक पर फ़ोकस करता है?jTextArea फोकस

+2

बेहतर मदद जल्दी के लिए, पोस्ट अपने एक कोड [एसएससीसीई] (http://www.sscce.org) के रूप में कोड जो आपकी समस्या का प्रदर्शन करता है। यह उपयोगकर्ताओं को आपकी समस्या की प्रतिलिपि बनाने/चिपकाने और पुन: पेश करने की अनुमति देता है। –

+0

मुझे लगता है कि यह संभव है, लेकिन मानक शामिल विजेट के साथ नहीं। इसके लिए आपको 'JTextArea' का उप-वर्ग लिखना होगा। – 11684

उत्तर

3

लेकिन फोकस खोने पर टेक्स्ट पर चयन नहीं दिखाता है।

वहाँ तीन तरीके हैं:

enter image description here

  • या प्रोग्राम के ओवरराइड हाइलाइटर

enter image description here

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DefaultHighlighter; 
import javax.swing.text.Highlighter; 
import javax.swing.text.JTextComponent; 

public class MultiHighlight implements ActionListener { 

    private JTextComponent comp; 
    private String charsToHighlight; 

    public MultiHighlight(JTextComponent c, String chars) { 
     comp = c; 
     charsToHighlight = chars; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     Highlighter h = comp.getHighlighter(); 
     h.removeAllHighlights(); 
     String text = comp.getText().toUpperCase(); 
     for (int j = 0; j < text.length(); j += 1) { 
      char ch = text.charAt(j); 
      if (charsToHighlight.indexOf(ch) >= 0) { 
       try { 
        h.addHighlight(j, j + 1, DefaultHighlighter.DefaultPainter); 
       } catch (BadLocationException ble) { 
       } 
      } 
     } 
    } 

    public static void main(String args[]) { 
     final JFrame frame = new JFrame("MultiHighlight"); 
     frame.add(new JTextField("Another focusable JComponents"), BorderLayout.NORTH); 
     JTextArea area = new JTextArea(10, 20); 
     area.setText("This is the story\nof the hare who\nlost his spectacles." 
       + "\nThis is the story\nof the hare who\nlost his spectacles."); 
     frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER); 
     JButton b = new JButton("Highlight All Vowels"); 
     b.addActionListener(new MultiHighlight(area, "aeiouAEIOU")); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(b, BorderLayout.SOUTH); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
7

कैरट के चयन के लिए एक सरल समाधान का DefaultCaret का एक सरल उपवर्गीकरण है:

textArea.setCaret(new DefaultCaret() { 
    @Override 
    public void setSelectionVisible(boolean visible) { 
     super.setSelectionVisible(true); 
    } 
}); 
+0

यह पूरी तरह से काम किया। फोकस खो जाने के बाद बस रहने के लिए हाइलाइट की आवश्यकता थी। –