2010-03-19 10 views
8

अगर मैं इस तरह MigLayout के साथ एक JTextArea का उपयोग करें:MigLayout JTextArea सिकुड़ नहीं है जब linewrap के साथ प्रयोग किया = सच

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
    this.setLayout(thisLayout); 
    { 
jLabel1 = new JLabel(); 
this.add(jLabel1, "cell 0 0"); 
jLabel1.setText("jLabel1"); 
    } 
    { 
jTextArea1 = new JTextArea(); 
this.add(jTextArea1, "cell 0 1 2 1,growx"); 
jTextArea1.setText("jTextArea1"); 
jTextArea1.setLineWrap(false); 
    } 

तो JTextArea बढ़ता है और पूरी तरह से सिकुड़ता है जब विंडो का आकार बदलने। जब मैं लाइन को स्क्रैप करने के लिए सेट करता हूं तो जब मैं विंडो को फिर से छोटा करता हूं तो JTextArea कम नहीं हो रहा है। मैं किसी भी मदद की सराहना करता हूं। धन्यवाद

मार्सेल

+0

एक सरल और तेजी से समाधान आप यहां प्राप्त कर सकते हैं! http://stackoverflow.com/a/7833439/2530822 – TotoliciCristian

उत्तर

8

इसका कारण यह है JTextArea के स्वचालित रूप से अपने न्यूनतम चौड़ाई कभी भी सेट वे आकार बदलने के लिए है। विवरण MigLayout forum पर उपलब्ध हैं। मोटे तौर पर संक्षेप में, एक पैनल बनाएं जिसमें JTextArea है और आपको आकार बदलने के व्यवहार पर और नियंत्रण देता है। यहाँ ऊपर मंच पोस्ट से एक अंश है:

static class MyPanel extends JPanel implements Scrollable 
{ 
    MyPanel(LayoutManager layout) 
    { 
    super(layout); 
    } 

    public Dimension getPreferredScrollableViewportSize() 
    { 
    return getPreferredSize(); 
    } 

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 

    public boolean getScrollableTracksViewportHeight() 
    { 
    return false; 
    } 

    public boolean getScrollableTracksViewportWidth() 
    { 
    return true; 
    } 

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 
} 

फिर, जहाँ भी आप JTextArea का प्रयोग करेंगे, पाठ क्षेत्र युक्त पैनल का उपयोग करें:

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
this.setLayout(thisLayout); 
{ 
    jLabel1 = new JLabel(); 
    this.add(jLabel1, "cell 0 0"); 
    jLabel1.setText("jLabel1"); 
} 
{ 
    JPanel textAreaPanel = new MyPanel(new MigLayout("wrap", "[grow,fill]", "[]")); 
    jTextArea1 = new JTextArea(); 
    textAreaPanel.add(jTextArea1); 
    this.add(textAreaPanel, "cell 0 1 2 1,grow,wmin 10"); 
    jTextArea1.setText("jTextArea1"); 
    jTextArea1.setLineWrap(false); 
} 
+0

आपको बहुत ज्यादा धन्यवाद Kaleb। मैंने इसे स्क्रॉलपैन में रखने की भी कोशिश की, जो ठीक काम करता है। सादर मार्सेल –

17

मैं सिर्फ पता चला कि यह बस द्वारा हल किया जा सकता

this.add(jTextArea1, "cell 0 1 2 1,growx, wmin 10"); 
करने के लिए लाइन

this.add(jTextArea1, "cell 0 1 2 1,growx"); 

बदलते

और कोई अतिरिक्त पैनल की आवश्यकता नहीं है। एक स्पष्ट न्यूनतम आकार निर्धारित करना चाल क्या है।

स्पष्टीकरण: MiGLayout श्वेतपत्र में गद्दी पर धारा के तहत टिप्पणी देखें:

http://www.migcalendar.com/miglayout/whitepaper.html

+0

+1 यह अन्य जिद्दी घटकों के साथ भी समस्याओं को हल करने लगता है। मेरे मामले में मेरा क्रोमियम ब्राउज़र फ्रेम न्यूनतम आकार जोड़ने तक कम नहीं होगा। –

+0

पुष्टि की गई, यह काम करता है, और स्वीकार्य उत्तर से उपयोग करना बहुत आसान है। आप 'wmin 0" निर्दिष्ट कर सकते हैं, जो मेरी राय में यह स्पष्ट करता है कि किसी समस्या के आसपास काम करने के लिए जोड़ा जाता है। अपने न्यूनतम फिक्स के लिए +1। – Timmos

+0

कृपया इस उत्तर को स्वीकृत के रूप में चिह्नित करने पर विचार करें। यहाँ एक आकर्षण की तरह काम करता है। धन्यवाद। – FaithReaper

संबंधित मुद्दे