2008-10-04 10 views
10

मैं जावा में फिर से आने की कोशिश कर रहा हूं (यह कुछ साल हो गया है)। मैंने वास्तव में जावा में कोई भी जीयूआई कोडिंग नहीं किया। मैं नेटबीन्स का उपयोग शुरू करने के लिए कर रहा हूं।जावा में रनटाइम पर अन्य पैनलों में मैं गतिशील रूप से पैनल कैसे जोड़ूं?

काम पर सी # में विनफॉर्म का उपयोग करते समय मैं अपने यूआई के कुछ हिस्सों को बनाने के लिए उपयोगकर्ता नियंत्रण का उपयोग करता हूं और उन्हें गतिशील रूप से रूपों में जोड़ता हूं।

मैं JPanels का उपयोग करने की कोशिश कर रहा हूं जैसे सी # में उपयोगकर्ता नियंत्रण। मैंने फॉर्म BlurbEditor नामक फ़ॉर्म बनाया है। इसके कुछ सरल नियंत्रण हैं। मैं इसे बटन ईवेंट पर रन टाइम पर किसी अन्य पैनल में जोड़ने की कोशिश कर रहा हूं।

mainPanel.add(new BlurbEditor()); 
mainPanel.revalidate(); 
//I've also tried all possible combinations of these too 
//mainPanel.repaint(); 
//mainPanel.validate(); 

यह दुर्भाग्य से काम नहीं कर रहा:

यहाँ कोड है कि मैंने सोचा था कि काम करेगा है। मैं क्या गलत कर रहा हूं?

उत्तर

17

मैंने इसे समझ लिया। स्वीकार किए जाते हैं जवाब के तहत टिप्पणी यहाँ यह व्याख्या करते हैं: Dynamically added JTable not displaying

असल में मैं सिर्फ

mainPanel.setLayout(new java.awt.BorderLayout()); 
-1

mainPanel.invalidate() और फिर यदि आवश्यक हो, mainPanel.validate() आज़माएं। यह जांचने योग्य भी हो सकता है कि आप ईवेंट प्रेषण धागे में यह सब कर रहे हैं, अन्यथा आपके परिणाम स्पॉटी और (आमतौर पर) गैर-निर्धारक होंगे।

+0

अमान्य विधि कॉल जोड़ने से मदद नहीं मिली। मैं इसे netbeans द्वारा उत्पन्न माउसक्लिक घटना से बुला रहा हूँ। – BFreeman

0

सभी स्विंग कोड के साथ के रूप में, भूल नहीं है किसी भी जीयूआई कॉल करने के लिए mainPanel.add() से पहले निम्न जोड़ा घटना प्रेषण धागे के भीतर अद्यतन करें। अन्यथा UI जहां उप-घटक जगह पता नहीं होगा - क्यों आप इस

// Do long running calculations and other stuff outside the event dispatch thread 
while (! finished) 
    calculate(); 
SwingUtilities.invokeLater(new Runnable(){ 
    public void run() { 
    // update gui here 
    } 
} 
5

Swing/AWT घटकों की तरह अपडेट करना चाहिए के लिए this देखें आम तौर पर इससे पहले कि आप उन्हें चीजों को जोड़ने के एक लेआउट करना होगा।

बीएफरेमेन ने BorderLayout का सुझाव दिया है जो उपयोग करने के सबसे आसान लोगों में से एक है और आपको माता-पिता के शीर्ष, नीचे, बाएं, दाएं या केंद्र में 'गोंद' चीजों की अनुमति देता है।

FlowLayout जैसे अन्य textarea की तरह हैं - यह माता-पिता के शीर्ष पर बाएं से दाएं घटक जोड़ता है और अंत में होने पर एक नई पंक्ति पर लपेटता है।

GridBagLayout जो हमेशा पता लगाने के लिए असंभव होने के लिए कुख्यात रहा है, लेकिन आपको लगभग सभी नियंत्रण प्रदान करता है जो आपको चाहिए। उन HTML टेबलों की तरह थोड़ा हम रोशन, कोस्पेन, चौड़ाई और ऊंचाई विशेषताओं के विचित्र संयोजनों के साथ देखते थे - जो कभी नहीं दिखते थे कि आप उन्हें कैसे चाहते थे।

1

mainPanel.add (नया BlurbEditor());

mainPanel.validate();

मुख्य पैनल।फिर से रंगना();

+0

मुझे लगता है कि उसने कहा कि उसने यह कोशिश की। – durron597

0

मैं इसी तरह की समस्या हल करने गया था, मैं कुछ परीक्षण के बाद पैनल क्रम
पर एक पैनल में निहित बदलने के लिए, retesting चाहता था और मेरी छद्म एल्गोरिथ्म में नाकाम रहने का एक बहुत यह है:

parentPanel: शामिल पैनल हम
childPanel निकालना चाहते हैं: पैनल हम स्विच करने के लिए
parentPanelLayout हैं: parentPanel के लेआउट
editParentLayout(): हर बार अलग childPanel और नई parentPanelLayout साथ parentPanel बनाता

parentPanel.remove(childPanel); 
editParentLayout(); 
parentPanel.revalidate(); 
parentPanel.repaint(); 
संबंधित मुद्दे