2010-01-21 15 views
5

से ढंकने से कैसे रखें, ग्रिडबैगलाउट द्वारा अदृश्य किए गए लेआउट के अलग-अलग घटक बनाते समय, लेआउट में शेष घटकों की व्यवस्था बदलती रहती है। ग्रिडबैगलाउट अदृश्य घटकों वाले कोशिकाओं को "पतन" प्रतीत होता है, जिससे अन्य घटक स्थिति बदल सकते हैं। यह एक बहुत ही कष्टप्रद व्यवहार है, और मैं इसे करने से रोकने के लिए एक रास्ता तलाश रहा हूं।ग्रिडबैगआउट: अदृश्य घटकों को

एक विधि मैंने कोशिश की है कि एक ही सेल में एक स्पेसर जोड़कर, उस घटक के पसंदीदा आकार के बराबर एक निश्चित आकार के साथ जो छुपाया जा सकता है, लेकिन यदि वह पसंदीदा आकार कभी बदलना था, तो यह होगा स्पेसर को सिंक में रखने में बहुत सारी परेशानी है। क्या कोई बेहतर तरीका है?

असल में, यह बहुत बुरा नहीं होगा अगर ग्रिडबैगलाउट वास्तव में अदृश्य घटकों के साथ कोशिकाओं को पूरी तरह से अवहेलना करेगा, लेकिन यह अभी भी सेल के इंससेट को ध्यान में रखता है, इसलिए यदि आपके पास इनपुट फ़ील्ड का लेआउट है और इन्हें अच्छी तरह से इन्सेट का उपयोग किया जाता है बीच में एक नियमित अंतराल के साथ उन्हें व्यवस्थित करें, फिर बीच में एक घटक को छिपाने से इसे लेआउट से हटा दिया जाता है लेकिन अंतराल के घटकों का मतलब होता है, लेकिन आमतौर पर उनके बीच एक बदसूरत डबल-व्यापी अंतर के साथ ...

+1

आह अच्छी पुरानी ग्रिडबैगआउटआउट की बाधाओं के साथ, मैं आपको कैसे याद नहीं करता (लेकिन मैं इस धागे का पालन करता हूं;) – Anders

+0

मुझे ग्रिडबैगलाउट को सालों से पता है, और फिर भी कभी-कभी मैं कितने कारणों की तलाश में बड़ी मात्रा में खर्च कर सकता हूं पतन व्यवहार। एक बड़ा घटक जोड़ने का प्रयास करें, उदाहरण के लिए बहुत अधिक टेक्स्ट वाले लेबल। फिर लेबल के पसंदीदा आकार की तुलना में अपनी ग्रिडबैगलाउटेड कंटेनर को चौड़ाई में आकार दें ... यह बहुत अजीब है – Timmos

उत्तर

1

एक संभावना है कि CardLayout के साथ नेस्टेड पैनलों का उपयोग घटकों को छिपाने के बजाय, अदृश्य में सेट करने के बजाय किया जाएगा। कार्डलायआउट पैनल को हमेशा सबसे बड़ा "कार्ड" का आकार रखने का कारण बनता है।

वैकल्पिक रूप से, आप ग्रिडबैगलाउट के बजाय नए (जावा 6 के रूप में) GroupLayout का उपयोग करने का प्रयास कर सकते हैं - यह आईएमओ का उपयोग करना बहुत आसान है और लगभग शक्तिशाली है।

+0

मुझे ग्रुपलाउट का प्रयास करने का मौका नहीं मिला है - यह दिलचस्प लगता है, लेकिन दुर्भाग्य से, जावा 1.5 संगतता प्रोजेक्ट में लागू है (मेरा मतलब है, आप उम्मीद कर सकते हैं कि उपयोगकर्ताओं को अपने वातावरण को उन राज्यों में अपडेट करना होगा जो 4 साल से कम उम्र के हैं ?!) –

1

उपयोग MigLayout

नये नोट्स में खुशी वापस लाने के लिए ^^।

मैंने अतीत में ग्रिडबैगआउट का भी उपयोग किया, और यह भयानक है। बॉयलरप्लेट कोड के बहुत सारे, और यदि आप एक छोटा सा घटक जोड़ते हैं, तो लेआउट शायद सबसे खराब हो जाता है।

एक अन्य विकल्प प्लेसहोल्डर के रूप में JPanel (या बॉक्स) का उपयोग कर के बारे में Boxlayout

+0

तीसरे पक्ष कोड एक विकल्प नहीं है, दुर्भाग्य से, विभिन्न कारणों से, और BoxLayout करता है यूआई तत्वों की (बजाय जटिल) आवश्यक व्यवस्था बनाने में सक्षम नहीं लगता है ... –

8

क्या उपयोग कर रहा है?
प्रत्येक सेल में एक जेपीनेल रखें और पैनलों में घटक जोड़ें। यदि आप घटक को अदृश्य कर देते हैं, तो पैनल अभी भी वहां होना चाहिए ...

+4

यह सुनिश्चित नहीं है कि इसका कोई अपवर्तक क्यों नहीं था, यह वही था जो मुझे चाहिए था। यद्यपि केवल एक चीज: आप 'कंटेनर पैनेल' करना चाहेंगे।setLayout (नया ग्रिडलाउट (1, 1)); या कुछ समान है, अन्यथा डिफ़ॉल्ट सीमा सीमा कुछ रिक्ति में जोड़ देगी और आपके सभी घटकों को कुछ पिक्सल से बाहर रखेगी। –

+0

इसका परीक्षण किया और यह भयानक पतन व्यवहार के लिए एक महान कामकाज है। – Timmos

0

आईआईआरसी, जो मैंने अतीत में किया है वह एक कंटेनर में घटक रखता है (या एक अलग घटक का उपयोग करता है) जो मूल के आकार की नकल करता है घटक, लेकिन यह छिपा राज्य नहीं है। इसे विधि या ग्रिड बैग के लिए एक मुखौटा में रखें, और आपका लेआउट कोड अच्छा और साफ रह सकता है।

+0

यही वह तरीका है जिसका मैं उपयोग कर रहा हूं ("बॉक्स" द्वारा प्रदान की गई विधियों के माध्यम से स्ट्रेट्स बनाना) लेकिन यह बेकार और त्रुटि-प्रवण है। –

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