2011-12-28 18 views
10

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

यदि मैं टेक्स्टफील्ड के बाद बटन का कोड लिखता हूं तो केवल बटन प्रदर्शित होता है।

कोई विचार क्यों?

JFrame mainframe=new JFrame(); 
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainframe.setBounds(0,0,200,200); 
    JButton jb=new JButton(); 
    jb.setText("Leech"); 
    mainframe.add(jb); 
    JTextField link=new JTextField(50); 
    mainframe.add(link); 
    mainframe.pack(); 
    mainframe.setVisible(true); 
+0

वर्ग जावाडोक स्पष्ट रूप से आप के रूप में जोड़ कॉल कर सकते हैं कि, जो यह सामग्री फलक में जोड़ देगा दिखा। कम से कम जावा के हाल के संस्करणों में 1.3 दस्तावेज जिसमें आप – Robin

उत्तर

5

एक JPanel करने के लिए अपने घटक जोड़ें और फिर JFrame की contentPane है कि पैनल को जोड़ने के द्वारा एक और लेआउट प्रबंधक (उदाहरण के एक FlowLayout के लिए) का उपयोग कर सकते हैं।

  
     JFrame window = new JFrame(); 
     JPanel mainframe=new JPanel(); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setBounds(0,0,200,200); 
     JButton jb=new JButton(); 
     jb.setText("Leech"); 
     mainframe.add(jb); 
     JTextField link=new JTextField(50); 
     mainframe.add(link); 
     window.getContentPane().add(mainframe); 
     window.pack(); 
     window.setVisible(true);
+3

जो मूल रूप से 'फ्लोलायआउट' को 'जेएफआरएएम' पर 'लेआउटमैनेजर' के रूप में सेट करने जैसा ही है, क्योंकि यह डिफ़ॉल्ट लेआउट फॉर्म 'जेपीनेल' – Robin

+1

है, यह विश्वास नहीं कर सकता कि यह स्वीकार्य उत्तर है। रॉबिन का जवाब नीचे सही जवाब है। बस समझना होगा कि जेएफआरएम का डिफ़ॉल्ट लेआउट मैनेजर क्या है और यदि कोई निर्दिष्ट नहीं है तो सीमा सीमा में डिफ़ॉल्ट स्थिति कुछ जोड़ दी जाती है। – Michael

+0

@ माइकल आपकी टिप्पणी का मुद्दा क्या है? क्या आपको लगता है कि यह जवाब गलत है या आपको यह पसंद नहीं है कि इसे इस तरह से कोडित किया गया है? – Ibrahim

9

इसके बजाय JFrame के लिए सीधे घटक जोड़ने की, वांछित LayoutManager साथ कंटेनर के रूप में एक JPanel का उपयोग करें।

Here आप लेआउट प्रबंधकों पर कई ट्यूटोरियल पा सकते हैं।

मूल रूप से स्विंग लेआउट मैनेजर बच्चों के घटक (अपनी स्थिति और उनके आकार की स्थापना) को रखने के लिए ज़िम्मेदार है, इसलिए आपके एप के अंदर उपयोग किए जाने वाले प्रत्येक कंटेनर घटक को एप्राइपिएट लेआउट मैनेजर के साथ कॉन्फ़िगर किया जाना चाहिए।

+0

देखें लेआउटमेनगर पर लिंक अब मर चुका है। कृपया ठीक करें। – Ungeheuer

11

JFrame पर डिफ़ॉल्ट लेआउट BorderLayout है। इस तरह के लेआउट के साथ Container पर add विधि को कॉल करना add(..., BorderLayout.CENTER) पर कॉल के बराबर है। BorderLayout के प्रत्येक स्थान में केवल एक तत्व हो सकता है। इसलिए दो कॉल

mainframe.add(jb); 
mainframe.add(link); 

परिणामस्वरूप आपके द्वारा जोड़े गए अंतिम घटक वाले केंद्र में परिणाम होते हैं। आप इस से बचना चाहते हैं तो आप या तो अलग-अलग स्थानों में जोड़ने, या बुला JFrame#setLayout

0

जेएफआरएम का डिफ़ॉल्ट लेआउट प्रबंधक सीमाबद्ध है। JFrame पर लेआउट प्रबंधक की स्थापना रद्द करने के लिए

mainframe.setLayout(new FlowLayout()); 

आप setBounds द्वारा निर्देशांक() विधि निर्दिष्ट करना चाहते हैं, तो आप है: आप स्वचालित लेआउट चाहते हैं, आप FlowLayout का उपयोग कर सकते

mainframe.setLayout(null); 
jb.setBounds(10,10,100,50); 
link.setBounds(10,70,180,100); 
+0

आप शून्य पर लेआउट करने का सुझाव देते कभी नहीं करना चाहिए, यह सिर्फ सादा गलत है। – Michael

0

यदि आप BorderLayout दस्तावेज़ीकरण mainframe.add (jb) देखते हैं; mainframe.add (जेबी, BorderLayout.CENTER) के बराबर है; mainframe.add (लिंक); mainframe.add (जेबी, BorderLayout.CENTER) के बराबर है;

तो यह सिर्फ पिछले एक

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