2010-11-15 15 views
9

मेरे पास JFrame है।जेएफआरएएम में एकाधिक घटकों को कैसे जोड़ा जाए?

मेरे पास बॉक्स वर्ग है जो घटक फैलाता है। इस बॉक्स श्रेणी में पेंट विधि है जो एक भरे आयताकार बनाता है।

जब मैं अपने जेएफआरएएम में इन बॉक्स घटकों में से कई जोड़ता हूं, तो केवल हाल ही में जोड़ा गया एक प्रदर्शित होता है जब मैं को जेएफआरएएम पर पर पुनर्निर्मित करता हूं।

मैंने लेआउट प्रबंधकों पर एक नज़र डाली, लेकिन मुझे यकीन नहीं है कि मैं यही चाहता हूं। मैं चाहता हूं कि मैं स्क्रीन पर जहां भी चाहूं आयतों के पूरे समूह की एनीमेशन बनाने में सक्षम होना चाहता हूं।

(मैंने पैनल बनाने की कोशिश की, पैनल को जेएफआरएएम में जोड़ दिया, और फिर पैनल में सभी बॉक्स घटकों को जोड़ दिया। यह काम नहीं करता था)।

अग्रिम धन्यवाद!

+0

कोड सहायक होगा। लगता है जैसे आप एक संदर्भ या smth अधिलेखित कर रहे हैं ... – Jules

+0

भविष्य में क्या करेंगे। धन्यवाद। – klyngbaek

उत्तर

9

आपके पास 2 विकल्प हैं। अब

JFrame frame; 
frame.setLayout(new FlowLayout()); 

, यदि आप एक से अधिक बॉक्स जोड़ने, यह फ्रेम पर दिखाई देगा:

आप अपने फ्रेम का लेआउट बदल सकते हैं।

दूसरा विकल्प वह है जो आपने कहा था। (फ्रेम करने के लिए एक पैनल जोड़ा जा रहा है)

JPanel pane = new JPanel(); 
frame.add(pane); 
(add the boxes to 'pane') 

इसके अलावा, आप अपने Box के आकार के साथ सावधान रहना चाहिए। आप शायद Box के निर्माण में कहीं भी setPreferredSize() पर कॉल करना चाहते हैं। यह जावा को बताएगा कि लेआउट में जोड़े जाने पर बॉक्स को किस आकार में बनाना है।

आपको Java Layout Manager Tutorials पर भी एक नज़र डालना चाहिए। वहां बहुत सारी जानकारी है।

और, एक और बात। फ्रेम पर एक समय में केवल एक बॉक्स प्रदर्शित किया जा रहा था क्योंकि जेफ्रेम का लेआउट मैनेजर BorderLayout है। और, जब आप BorderLayout वाले घटक पर add पर कॉल करते हैं, तो घटक स्वचालित रूप से घटक के केंद्र में जोड़ा जाता है। add पर बाद की कॉल मध्य घटक को ओवरराइट कर देगी, जिससे बीच में केवल एक घटक छोड़ा जा सकेगा।

+0

क्या कोई ऐसा लेआउट है जो मुझे बस जितना चाहें उतने घटकों को जोड़ने देता है, बिना स्पष्ट रूप से कहां चयन करें (उदाहरण के लिए बाएं, दाएं या केंद्र)? – klyngbaek

+0

मेरे पास दूसरा विकल्प 1 घटक जोड़ना है, और उस घटक में पेंट विधि है जो सभी आयतों को आकर्षित करती है। (प्रत्येक आयताकार को अपने स्वयं के घटक के साथ प्रस्तुत करने के बजाए) – klyngbaek

+0

@ ज़ुच, फ़्लोलाउट आपको जितने चाहें उतने घटक जोड़ने देगा। – jjnguy

0

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

संपादित करें: आप जो जोड़ना चाहते हैं उसके बारे में हिस्सा याद किया लेकिन अवधारणा अभी भी वही है, अगर आप इन घटकों को डिफ़ॉल्ट लेआउट मैनेजर में जोड़ते हैं, तो वे ओवरराइट हो जाएंगे। लगता है जैसे आपको अपने बॉक्स घटकों में से केवल एक के अंदर अपनी पेंटिंग करने की आवश्यकता हो सकती है या एक जेपीनल बना सकते हैं और null पर लेआउट सेट कर सकते हैं लेकिन फिर आपको उन्हें स्पष्ट रूप से रखना होगा। वास्तव में इस पर निर्भर करता है कि आप इसके साथ क्या करना चाहते हैं।

+0

वह रनटाइम से घटकों को आकर्षित करने की कोशिश कर रहा है, मैं नहीं देख सकता कि नेटबींस जीयूआई निर्माता किसी भी मदद के लिए कैसे हो सकता है। – Jules

+0

@ जुल्स - ईडीआईटी देखें ... – Merky

0

पहले पेपर पर अपना लेआउट करें, फिर स्विंग लेआउट प्रबंधकों पर पढ़ें।

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

1

आप फ्रेम लेआउट null पर सेट कर सकते हैं और फिर setBounds() का उपयोग अपने बक्से को ठीक उसी स्थान पर रखने के लिए कर सकते हैं जहां आप चाहते हैं।

0

आपके सभी उत्तरों के लिए धन्यवाद।

चूंकि मैं अपनी खुद की कस्टम कक्षा का उपयोग कर रहा हूं, बॉक्स, मेरे पास पेंट विधि के माध्यम से मेरे आयत की स्थिति निर्धारित करने की क्षमता है।

मुझे एहसास हुआ कि मेरा बॉक्स वर्ग गलत चीज़ का विस्तार कर रहा था। यह javax.swing.Jcomponent विस्तार किया जाना चाहिए था।

यदि अब मैं ओवरलेलेआउट के साथ एक पैनल का उपयोग करता हूं, तो मेरे पैनल को उस पैनल में जोड़ें, वे सभी ठीक से दिखाई देते हैं।

+1

'javax.swing.box 'के साथ विवादों के लिए देखें। – trashgod

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