2010-06-20 12 views
5

यह समस्या मामूली लगती है, लेकिन मुझे समाधान नहीं मिल रहा है।jTextArea को ऊंचाई रखने के लिए कैसे सेट करें जो उस पाठ के आकार से मेल खाता है (स्क्रॉलबार से बचने के लिए)

जब मैं कोई फॉर्म बनाता हूं तो इसमें JTextArea होता है। मैं इसमें बड़े निरंतर पाठ रखना चाहता हूं। यदि पाठ 1000 लाइन लंबा कहता है, तो मैं अपने JTextArea को 1000 लाइनों (उच्च स्क्रॉलबार के बिना पूरे पाठ को प्रदर्शित करने के लिए पर्याप्त होने के लिए) होना चाहता हूं। JTextArea एक पैनल के अंदर है जिसमें स्क्रॉलबार हो सकता है, इसलिए जब यह बहुत बड़ा हो जाता है तो यह कोई समस्या नहीं है (उस पैनल में दो JTextArea हैं .. एक diff टूल में कुछ)। क्या कोई जानता है कि मैं इसे कैसे प्राप्त कर सकता हूं? धन्यवाद।

+0

के आकार को सेट करने के लिए JSCrollPane के setPrefferedSize() का उपयोग करने के बाद, मैंने नेटबीन में स्वचालित रूप से विस्तार करने के लिए कुछ विकल्प खोजने का प्रयास किया है, और मैंने इसे प्रोग्रामिक रूप से सेट करने के लिए एक विधि खोजने का प्रयास किया है व्यवहार, लेकिन सफलता के बिना (setSize विधियों आकार बदल नहीं है ..) – celicni

उत्तर

5

BorderLayout बॉक्स से बाहर स्क्रॉलबार संभाल करता है, तो आप बस एक JScrollPane में अपने JTextArea डाल इससे पहले कि आप अपने JPanel को जोड़ना होगा। दूसरी तरफ FlowLayout नहीं है। यह स्क्रॉल बार प्रदर्शित नहीं करेगा जब तक कि @Xorty intimates के रूप में, आप setPreferedSize() पर अपने JScrollPane पर कॉल करें और उसे वह आयाम दें जिसे आप चाहें। (उपयोगी है जब जानकारी संदेश दिखाना ऊंचाई पाठ के आधार पर, सीमित चौड़ाई)

+0

फ़्लोलाउट में बदलने से मेरी समस्या हल हो गई। धन्यवाद। – celicni

0

ठीक है, सबसे पहले: यह JTextArea jTextArea नहीं है।

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

+0

धन्यवाद। लेकिन पहली बात, JTextArea/JScrollPane ऊंचाई के आधार पर नहीं, jScrollPane1.getPreferredSize()। GetHeight() 91.0 देता है। इसका क्या मतलब है? और दूसरी बात, मैं jScrollPane1.getPreferredSize() के साथ क्या करूँ? अगर मैं इसे jTextArea() में सेट करता हूं। setSize() या jTextArea.setMinimumSize, कोई प्रभाव नहीं है। अगर मैं इसे jTextArea.setPreferredSize() में पास करता हूं, तो प्रभाव यह है कि स्कॉलबार चला गया है, लेकिन JTextArea ने टेक्स्ट फिट करने के लिए विस्तार नहीं किया है (इसलिए मैं पूरे पाठ तक नहीं पहुंच सकता)। – celicni

4

तुम भी कुछ इस तरह का उपयोग कर सकते हैं:

public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){ 

     JTextArea aMessagePanel = new JTextArea(); 
     aMessagePanel.setText(message); 

     /*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/ 
     aMessagePanel.setPreferredSize(minimalSize); 
     aMessagePanel.setSize(minimalSize);    

     Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength()); 

     Dimension d = new Dimension(minimalSize.width, r.y + r.height); 
     aMessagePanel.setPreferredSize(d); 
     return aMessagePanel; 

} 
1

बढ़ाने या JTextArea की ऊंचाई कम करने के लिए। जब कोई टेक्स्ट दर्ज किया जाता है, तो JTextArea के getPreferredSize() के लिए कॉल करें- यह आपको पूरे टेक्स्ट को प्रदर्शित करने के लिए आवश्यक आकार देगा। JTextArea