2009-05-11 14 views
15

द्वारा यह संभव JPanel बताने के लिए सभी घटकों को इसमें मौजूद फिट करने के लिए अपने आकार निर्धारित करने के लिए है? JFrame के लिए pack() की तरह कुछ।JPanel आकार आंतरिक घटकों

संपादित करें: preferredSize साथ चाल मदद नहीं की। मुझे JSplitPane मिल गया है, जहां एक भाग में कई लेबल के साथ ग्रिडबैगआउट है (स्क्रीनशॉट देखें) और लेबल एक दूसरे को ओवरलैप करते हैं।

screenshot http://foto.darth.cz/pictures/screen.png

उत्तर

17

pack() के लिए स्रोत कोड को देखने के बाद, मैं के साथ आया था।

आप या validate() बाद में कॉल करने के लिए नहीं हो सकता है हो सकता है; मेरे छोटे उदाहरण में, इससे कोई फर्क नहीं लग रहा था, लेकिन जावाडोक का कहना है:

validate विधि एक कंटेनर फिर से अपने उप-घटक बाहर बिछाने के लिए पैदा करने के लिए प्रयोग किया जाता है। कंटेनर प्रदर्शित होने के बाद इस कंटेनर के उपसंघकों को संशोधित किया जाता है (कंटेनर में जोड़ा या हटाया जाता है, या लेआउट से संबंधित जानकारी बदल दी जाती है) इसे लागू किया जाना चाहिए।

तो मैं यह क्यों आप अपने JPanel repack के लिए आ रही हैं, पर निर्भर करता है लगता है।

+0

ठीक हो Thanks.It'll। –

1

हो सकता है आप अपने पैनल से हटाने के

setResizable (गलत) द्वारा ऐसा ही कुछ कर सकते हैं;

panel.setPreferredSize(panel.getPreferredSize()); 

यह पैनल बलों अपनी subcomponenents के पसंदीदा आकारों के आधार पर अपनी पसंद के आकार पुनर्गणना के लिए:

3

डिफ़ॉल्ट रूप से Container एक वांछित आकार कि कंटेनर द्वारा दिए गए पसंदीदा लेआउट आकार से मेल खाता है। तो सचमुच तुम सब करने की है:

panel.setSize(panel.getPreferredSize()); 

मुमकिन है कि आप कुछ माता पिता के साथ अजीब इस के बराबर कर माता-पिता के लेआउट प्रबंधक को रोकने के लिए कर रहे हैं।

1

मैं कोशिश करेंगे:

panel.revalidate(); 
panel.repaint(); 

यह आवश्यक रूप से अपनी पसंद के आकार के पैनल सेट नहीं होगा, कि क्या लेआउट प्रबंधक का उपयोग करने का फैसला करता है पर अधिक निर्भर है।

इस मामलों में आप किसी पैनल है जो वर्तमान में प्रदर्शित और दृश्य से जोड़ लिया है/हटाया घटकों में उपयोगी है।

अद्यतन: आपके स्क्रीनशॉट के आधार पर मैं निम्नलिखित कह सकता हूं: 1) प्रोग्रामर रूप से विभाजक स्थान को बदलने पर विचार करें। 2) प्रोग्राम के खिड़की ही आकार बदलने पर विचार करें क्षैतिज के बाद से यह विखंडित पेन के दोनों पक्षों को दिखाने के लिए एक छोटे से तंग हो रहा है। या दोनों। आप

splitPane.setDividerLocation(newSize); 

ध्यान रखें कर वहाँ इस के लिए दो अतिभारित तरीके हैं कि द्वारा विभक्त स्थान निर्धारित कर सकते हैं, एक एक नाव एक एक पूर्णांक ले जा रहा है। फ्लोट आकार का प्रतिशत करता है जबकि int पिक्सेल में आकार होता है। आकार बाएं हाथ पैनल (या उस अभिविन्यास के लिए शीर्ष पैनल) के लिए है। मैं पैनलों की पसंदीदा चौड़ाई के आधार पर संभवतः विभाजक स्थान को बदलने पर विचार करता हूं।

+0

सटीक समस्या के लिए संपादन देखें –

0

जेएसप्लिटपेन्स थोड़ा सा उग्र है जब यह अपने बच्चों के आकार की बात आती है, तोपर एक नज़र डालें। क्या आप ग्रिडबैगआउट सही तरीके से उपयोग कर रहे हैं? ऐसा लगता है कि यह सही जेपीनल का न्यूनतम आकार ठीक से सेट नहीं कर रहा है।

0

javax.swing रहस्य खुद को धीरे-धीरे प्रकट करते हैं, और केवल उन लोगों के लिए जो स्विंग के देवताओं को कई मुक्तियां प्रदान करते हैं (विशेष रूप से बालों के झुकाव, आधी रात के तेल को जलाने के घंटे)।

हालांकि, बिंदु में इस मामले के लिए मैं स्विस सेना चाकू का एक प्रकार है जो आमतौर पर क्या करता है आपको लगता है ढांचे वैसे भी क्या करना चाहिए के रूप में निम्नलिखित सुझाव है:

myJPanel.getTopLevelAncestor().validate() 

पवित्र पाठ कहते हैं, "पुष्टि यह कंटेनर और इसके सभी उपमहाद्वीप। " (Container.validate)। एनबी getTopLevelAncestor() एक JComponent विधि है।

याद नहीं किया जा सकता है कि जेएसप्लिटपेन इस में कैसे फिट बैठता है: इसे आज़माएं और आपको शायद यह पता चलेगा कि यह दोनों घटकों (दाएं और बाएं, ऊपर और नीचे) को मान्य करता है, लेकिन अगर मैं विभाजक बदलता हूं तो मुझे आश्चर्य होगा वैसे भी यह तुम्हारे लिए।

1

मुझे नेटबींस जीयूआई बिल्डर का उपयोग कर एक समान समस्या थी। मेरे भीतरी पैनल अजीब आकार प्राप्त कर रहे थे; मैं मैन्युअल रूप से न्यूनतम और पसंदीदा आकार को समायोजित करने की कोशिश कर रहा था, जो एक निराशाजनक व्यायाम था।

समस्या हल हो गया था जब मैं सभी न्यूनतम रीसेट और वरीय आकार वापस डिफ़ॉल्ट (Netbeans जीयूआई बिल्डर में: सही JPanel घटक क्लिक करें -> गुण -> preferredSize -> डिफ़ॉल्ट पर रीसेट करें)। जब कोई लगाया आकार नहीं होता है, तो जेपीनल आंतरिक घटक का आकार लेता है।

नोट: GridBaLayout मेरे मामले में इस्तेमाल किया गया था यदि आप setSize नहीं है, setPreferredSize या setMinimumSize

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