2012-04-04 7 views
6

विशिष्ट स्थिति पर लेआउट में घटकों को कैसे रखें। जैसा कि मैं 3 कॉम्बो बॉक्स के नीचे, पहली पंक्ति में 2 टेक्स्ट बॉक्स रखना चाहता हूं।विशिष्ट पदों पर घटकों को कैसे रखा जाए?

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

क्या आप मुझे उपयोग करने के लिए कुछ लेआउट का सुझाव दे सकते हैं और इसका उपयोग कैसे करें?

topPanel=new JPanel(); 
topPanel.setLayout(new FlowLayout()); 
topPanel.setBorder(new TitledBorder(new EtchedBorder(), "Customer Data")); 

CNameTextField = new JTextField (20); // create the Customer Name text field 
CNameTextField.setEditable(true);  // set editable text box 

CIDLabel=new JLabel("Customer ID"); 

C_IDTextField = new JTextField (10); 
C_IDTextField.setEditable(true);  // set editable text box 

topPanel.add(CNameTextField); 
topPanel.add(C_IDTextField); 

// Create and populate Room type combo box 
roomTypeCombo = new JComboBox(); 
roomTypeCombo.addItem("Budget($50)");  

// Create and populate Meal type combo box 
mealCombo = new JComboBox(); 
mealCombo.addItem("None");  

// Create and populate Days combo box 

daysCombo = new JComboBox(); 

for(int i=0;i<31 ; i++) { 
      // populate combobox with days 
    daysCombo.addItem(i); 
} 
    // Adding rest of the components to top panel 
topPanel.add(roomTypeCombo); 
topPanel.add(mealCombo); 
topPanel.add(daysCombo); 

धन्यवाद:

यहाँ मेरी कोड है।

+2

अगर मैं, उपयोग कर सकते हैं [MigLayout] (http://www.miglayout.com/) ऐसी बातों के लिए भी अच्छा है, और भी :-) लागू करने के लिए या आप के साथ जा सकते हैं आसान [GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html), यह कभी-कभी संभालने में थोड़ा मुश्किल होता है :-( –

उत्तर

5

लेआउट को बदलने का प्रयास करें। http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

आप दो पंक्तियों के साथ एक GridLayout के लिए जा सकते हैं, क्रमशः 3 JComboBoxs, और दो JTextFields शामिल करने वाले प्रत्येक लाइन के साथ (उदाहरण के लिए, वहाँ कुछ अन्य लोगों के संयोजन संभव है)।

दस्तावेज़ीकरण पर सावधानी से देखो और वेब पर आसानी से पहुंचने योग्य कुछ उदाहरण देखें।

import java.awt.GridLayout; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class SwingResizeJFrame { 

    public SwingResizeJFrame() { 
     JTextField TextField1 = new JTextField("firstTextField"); 
     JTextField TextField2 = new JTextField("secondTextField"); 
     JPanel firstPanel = new JPanel(); 
     firstPanel.setLayout(new GridLayout(0, 2, 10, 10)); 
     firstPanel.add(TextField1); 
     firstPanel.add(TextField2); 

     JComboBox comboBox1 = new JComboBox(new Object[]{"Ester", "Jordi", "Jordina", "Jorge", "Sergi"}); 
     JComboBox comboBox2 = new JComboBox(new Object[]{"Ester", "Jordi", "Jordina", "Jorge", "Sergi"}); 
     JComboBox comboBox3 = new JComboBox(new Object[]{"Ester", "Jordi", "Jordina", "Jorge", "Sergi"}); 
     JPanel secondPanel = new JPanel(); 
     secondPanel.setLayout(new GridLayout(0, 3, 10, 10)); 
     secondPanel.add(comboBox1); 
     secondPanel.add(comboBox2); 
     secondPanel.add(comboBox3); 

     JFrame frame = new JFrame(); 
     frame.setLayout(new GridLayout(2, 1, 10, 10)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(firstPanel); 
     frame.add(secondPanel); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       SwingResizeJFrame demo = new SwingResizeJFrame(); 
      } 
     }); 
    } 
} 
+0

मैं सहमत हूं। मुझे कोड पोस्ट करने के लिए जल्दी में था धन्यवाद। यह करने का सबसे अच्छा तरीका नहीं है, हो सकता है कि खिड़की के आकार का आकार बदलने पर कुछ समस्याएं हो सकें? (हालांकि परीक्षण करने का कोई समय नहीं) –

7

सबसे विशिष्ट प्रकार का लेआउट पूर्ण स्थिति है।

चेतावनी: पूर्ण स्थिति शायद ही कभी, अगर कभी, इस्तेमाल किया जाना चाहिए। क्यों कई कारण हैं। यहां एक है: Absolute positioning (No layout manager) vs. absolute positioning in MiGlayout

- चेतावनी जोड़ने के अच्छे विचार के लिए उपयोगकर्ता brimborium पर धन्यवाद। ऊपर

अपने कोड में, बजाय FlowLayout को topPanel के लेआउट की स्थापना की, null के लिए सेट:

कहा जा रहा है, तो यहां आपको पूर्ण स्थिति का प्रयोग है।

topPanel.setLayout(null); 
बाद कोड में पर, सही इससे पहले कि आप topPanel के घटकों जोड़ना शुरू

, फोन कंटेनर की setBounds विधि:

someJComponent.setBounds(x-coord, y-coord, width, height); 

इसलिए उदाहरण के लिए आप JComboBox() का एक उदाहरण बनाया है और वह roomTypeCombo नामित , निम्न कोड दिखाता है कि पूरी तरह से roomTypeCombo को कैसे स्थान दें। - roomTypeCombo के रिश्तेदार x- निर्देशांक यह माता पिता है करने के लिए, topPanel सेट
int x-coord:

topPanel.setLayout(null); 

// code... 

roomTypeCombo = new JComboBox(); 

// code... 

roomTypeCombo.setBounds(100, 100, 200, 50); 
topPanel.add(roomTypeCombo); 


setBounds विधि, ऊपर का इस्तेमाल किया, चार मापदंडों है।
int y-coord - roomTypeCombo के माता-पिता, topPanel के सापेक्ष 0-y-समन्वय सेट करें।
int width, int height - अंतिम दो पैरामीटर roomTypeCombo की चौड़ाई और ऊंचाई निर्दिष्ट करते हैं, जो कि सुंदर आत्म व्याख्यात्मक है।


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

मुझे खेद है कि मैंने जो भी लिखा है, वैसे भी आपको आपकी मदद नहीं करता है।

More information on absolute positioning

+1

उस प्रश्न का सही जवाब। मैं खुद से पूछता हूं कि दूसरा जवाब क्यों चुना गया था। (हालांकि एक चेतावनी होनी चाहिए, कि पूर्ण स्थिति स्थिति ज्यादातर मामलों में ** ** ** ऐसा करने का तरीका नहीं है।) – brimborium

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