2012-08-18 15 views
6

तो, मेरे पास जेपीएक्सएरिया एक जेपीनल (बॉक्सलाउट) पर है। मेरे पास बॉक्स फिलर भी है जो बाकी जेपीनल भरता है। मुझे सिंगल-लाइन-ऊंचाई (मैं इसे प्रबंधित कर सकता हूं) के साथ शुरू करने के लिए अपने JTextArea की आवश्यकता है, और जब आवश्यक हो तो विस्तार और कम करने के लिए।JTextArea शब्द रैप आकार बदलना

वर्ड रैप सक्षम है, नई लाइन को जोड़ा/हटाए जाने पर मुझे बस इसकी ऊंचाई समायोजित करने की आवश्यकता है।

मैंने दस्तावेज़ लिस्टनर और getLineCount() के साथ प्रयास किया, लेकिन यह wordwrap-newlines को पहचान नहीं पाता है।

यदि संभव हो तो मैं फोंट के साथ गड़बड़ से बचना चाहता हूं।

और, कोई स्क्रॉल पैन नहीं। यह जरूरी है कि JTextArea हर समय पूरी तरह से प्रदर्शित होता है।

उत्तर

13

JTextArea सही परिस्थितियों में एक विशेष दुष्प्रभाव है, यह इसके स्वयं के समझौते से बढ़ सकता है। जब मैं एक साधारण दो पंक्ति पाठ संपादक (अधिकतम पंक्तियों के साथ प्रति पंक्ति प्रतिबंधित वर्णों की लंबाई) स्थापित करने की कोशिश कर रहा था, तो मैं दुर्घटनाग्रस्त हो गया था ...

मूल रूप से, सही लेआउट प्रबंधक दिया गया, यह घटक , यह वास्तव में समझ में आता है, लेकिन मुझे आश्चर्य से ले लिया ...

I'm so smallLook at me grow

अलावा अब, आप एक ComponentListener उपयोग करने के लिए नजर रखने के लिए चाहते हो सकता है जब घटक आकार को परिवर्तित करता है - यह स्वयं के समझौते के बढ़ सकता है यही वह है जो आप रुचि रखते हैं ...

public class TestTextArea extends JFrame { 

    public TestTextArea() { 

     setLayout(new GridBagLayout()); 

     JTextArea textArea = new JTextArea(); 
     textArea.setColumns(10); 
     textArea.setRows(1); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 

     add(textArea); 

     setSize(200, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 

     textArea.addComponentListener(new ComponentAdapter() { 

      @Override 
      public void componentResized(ComponentEvent ce) { 

       System.out.println("I've changed size"); 

      } 

     }); 

    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new TestTextArea(); 
    } 

}