2011-01-06 32 views
25

मैं परीक्षण करने के लिए एक JButton संदर्भ में दो JPanels में जोड़ने के लिए कोशिश कर रहा हूं (कुछ और परीक्षण कर रहा हूं), और यह पहले पैनल से गायब हो गया है!कई कंटेनरों में एक स्विंग घटक जोड़ा नहीं जा सकता है?

तो, क्या स्विंग घटक को कई कंटेनर में जोड़ा नहीं जा सकता है?

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

उत्तर

45

से: http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.html:

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

+2

आपकी मदद के लिए धन्यवाद! –

+0

मैंने सटीक शब्दों की जांच की और आपके द्वारा पोस्ट किए गए एक ही समय में मेरा उत्तर संपादित किया। मुझे लगता है मुझे पहले ताज़ा करना चाहिए था। – jzd

+0

हेहे। ठीक है! –

1

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

+0

आपकी मदद के लिए धन्यवाद! –

3

हल हो गया।

जावा ट्यूटोरियल के UI-Swing अनुभाग पर जांच कर रहा है।

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

जैसा कि आपने पाया है, आप घटक साझा नहीं कर सकते हैं। हालांकि आप अन्य दृष्टिकोण भी उपयोग कर सकते हैं।

एक JButtons के मामले में आप एक कार्रवाई साझा कर सकते हैं:

JButton Button1 = नए JButton (someAction); जेबटन बटन 2 = नया जेबटन (कुछ क्रिया);

अधिक जानकारी के लिए How to Use Actions पर स्विंग ट्यूटोरियल से अनुभाग पढ़ें।

अन्य मामलों आप मॉडल साझा करने के लिए चाहते हो सकता है में:

DefaultTableModel model = new DefaultTableModel(...); 
JTable table1 = new JTable(model); 
JTable table2 = new JTable(model); 

समाधान आपकी आवश्यकता पर निर्भर करता है।