2013-06-20 4 views
6

में एक घटक अवधि कई कक्षों कर सकते हैं कैसे मैं स्कूल के लिए इस बनाने के लिए है:मैं एक GridBagLayout

GUI

इस कोड है मैं अब तक है:

import javax.swing.*; 
import java.awt.*; 

public class AddressBookGui1 extends JFrame { 
public AddressBookGui1(){ 

    GridBagLayout gbl = new GridBagLayout(); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    setLayout(gbl); 

    JLabel label; 
    JButton button; 
    JTextField textField; 
    JTextArea textArea = new JTextArea(10, 20); 

    gbc.weightx = 1; 
    label = new JLabel("text"); 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    add(label ,gbc); 

    textField = new JTextField(); 
    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 1; 
    gbc.gridy = 0; 
    add(textField ,gbc); 

    label = new JLabel("text"); 
    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.gridwidth = 1; 
    add(label ,gbc); 

    textField = new JTextField(); 
    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 1; 
    gbc.gridy = 1; 
    gbc.gridwidth = 2; 
    add(textField, gbc); 

    label = new JLabel("text"); 
    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 0; 
    gbc.gridy = 2; 
    gbc.gridwidth = 1; 
    add(label ,gbc); 

    textField = new JTextField(); 
    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 1; 
    gbc.gridy = 2; 
    gbc.gridwidth = 2; 
    add(textField, gbc); 

    label = new JLabel("text"); 
    gbc.weightx = 1; 
    gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 0; 
    gbc.gridy = 3; 
    gbc.gridwidth = 1; 
    add(label ,gbc); 



    gbc.weightx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.anchor = GridBagConstraints.CENTER; 
    gbc.gridwidth = 2; 
    gbc.gridx = 1; 
    gbc.gridy = 3; 

    add(textArea, gbc); 

    gbc.weightx = 1; 
    button = new JButton("text"); 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridwidth = 1; 
    gbc.gridx = 0; 
    gbc.gridy = 4; 
    add(button ,gbc); 

    gbc.weightx = 1; 
    button = new JButton("text"); 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.gridx = 3; 
    gbc.gridy = 4; 
    add(button ,gbc); 



} 
public static void main(String[] args){ 
    AddressBookGui1 frame = new AddressBookGui1(); 
    frame.setTitle("Address Book"); 
    frame.setSize(400, 300); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 

} 

This is the result

(मुझे अभी भी पैडिंग और इन्सट्स से निपटने की ज़रूरत है। मुझे उन लोगों को एक बहुत ही सरल कार्यक्रम में काम करने के लिए मिला है, इसलिए मुझे लगता है कि मेरे पास उस सामान पर एक हैंडल है)

मैंने ग्रिडबैगलाउट ओरेकल ट्यूटोरियल की कोशिश की है और मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। क्या कोई मुझे इसे और अधिक दिखने में मदद कर सकता है जैसा कि माना जाता है? विशेष रूप से टेक्स्ट फ़ील्ड और टेक्स्ट एरिया को 2 सेल्स पर फैलाने के लिए।

+0

'विशेष रूप से टेक्स्ट फ़ील्ड्स और टेक्स्ट एरिया को 2 सेल्स पर फैलाने के लिए' - फिर दो कोशिकाओं का विस्तार क्यों करना है? आपकी तस्वीर में आपके पास 2 कॉलम और 5 पंक्तियां हैं। केवल एक चीज जिसे आप बदलने की जरूरत है बटन को सही साबित करना है। इसके लिए मुझे लगता है कि आपको एंकर के साथ खेलना होगा। ट्यूटोरियल फिर से देखें। – camickr

+0

मेरे पास 3 कॉलम हैं। अंतिम बटन कॉलम 3 में है। –

+0

[यह वह ग्रिड है जिसे मैं बनाना चाहता हूं] (http://i.imgur.com/RXuoawF.png) –

उत्तर

8

कुछ कोड जो मैंने आपके कोड के बारे में देखा है।

  • JFrame की setSize() प्रयोग न करें। यह असामान्य व्यवहार का कारण बन जाएगा। इसके बजाय, फ्रेम आकार को अपने घटकों के आकार के अनुसार स्वयं दें। यदि आप फ्रेम को बड़ा करना चाहते हैं, तो फ्रेम के आकार को आकार दें लेकिन इसके अंदर के घटक। आप या तो सेट कर सकते हैं यदि पर घटक के getpreferredsize को ओवरराइड करें, तो आप वास्तव में आकार समायोजित करना चाहते हैं क्योंकि GridBagLayout उन लेआउट प्रबंधकों में से एक है जो घटक का पसंदीदा आकार का सम्मान करता है। अनावश्यक स्थान को हटाने के लिए pack() का उपयोग करें।

  • जेएफआरएएम का विस्तार न करें, अपनी यूआई कक्षा को मुख्य पैनल और बनाने के लिए सभी घटकों को जोड़ें। उस वर्ग के यूआई को निकालने के लिए उस पैनल के लिए गेटटर प्रदान करें (उदा। getUI())।

  • जब भी किसी अन्य घटक पर लागू होने जा रहा है तो हमेशा ग्रिडबैग कॉन्स्ट्रेनेंट ऑब्जेक्ट को पुन: स्थापित करें। इस तरह यह पठनीय है।

  • घटक के चारों ओर पैडिंग लगाने के लिए इन्सेट का उपयोग करें।

  • विभिन्न घटकों के लिए समान संदर्भ का पुन: उपयोग न करें;

  • उपयोग Initial Thread

  • यह मानक नहीं है बल्कि यह मैं यह वास्तव में सहायक होता है जब GridBagLayout साथ काम कर रहे, GBC की कमी की स्थापना में मिल जाए, वर्णमाला के क्रम में यह सुनिश्चित करें।

अपनी समस्या को हल करने के लिए, यहाँ बातें मैं के बारे में लागू किया बताया साथ संशोधित कोड है।

public class AddressBook { 

    private JPanel pnlMain; 

    public AddressBook() { 
     pnlMain = new JPanel(); 
     pnlMain.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 

     JLabel lblName = new JLabel("Name"); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.insets = new Insets(0, 10, 0, 0); 
     gbc.weightx = 1; 
     pnlMain.add(lblName, gbc); 

     JTextField txtName = new JTextField(); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 3; 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.insets = new Insets(5, 0, 0, 10); 
     gbc.weightx = 1; 
     pnlMain.add(txtName, gbc); 

     JLabel lblPhone = new JLabel("Phone"); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 1; 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.insets = new Insets(0, 10, 0, 0); 
     gbc.weightx = 1; 
     pnlMain.add(lblPhone, gbc); 

     JTextField txtPhone = new JTextField(); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 3; 
     gbc.gridx = 1; 
     gbc.gridy = 1; 
     gbc.insets = new Insets(5, 0, 0, 10); 
     gbc.weightx = 1; 
     pnlMain.add(txtPhone, gbc); 

     JLabel lblEmail = new JLabel("Email"); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 1; 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     gbc.insets = new Insets(0, 10, 0, 0); 
     gbc.weightx = 1; 
     pnlMain.add(lblEmail, gbc); 

     JTextField txtEmail = new JTextField(); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 3; 
     gbc.gridx = 1; 
     gbc.gridy = 2; 
     gbc.weightx = 1; 
     gbc.insets = new Insets(5, 0, 0, 10); 
     pnlMain.add(txtEmail, gbc); 

     JLabel lblAddress = new JLabel("Address"); 
     gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 1; 
     gbc.gridx = 0; 
     gbc.gridy = 3; 
     gbc.insets = new Insets(0, 10, 0, 0); 
     gbc.weightx = 1; 
     pnlMain.add(lblAddress, gbc); 

     JTextArea txtAreaAddress = new JTextArea(10, 20); 
     JScrollPane pane = new JScrollPane(txtAreaAddress); 
     gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.NORTH; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridwidth = 3; 
     gbc.gridx = 1; 
     gbc.gridy = 3; 
     gbc.insets = new Insets(5, 0, 0, 10); 
     gbc.weightx = 1; 
     pnlMain.add(pane, gbc); 

     JButton btnSave = new JButton("Save"); 
     gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.WEST; 
     gbc.fill = GridBagConstraints.NONE; 
     gbc.gridwidth = 1; 
     gbc.gridx = 0; 
     gbc.gridy = 4; 
     gbc.insets = new Insets(10, 10, 10, 0); 
     gbc.weightx = 1; 
     pnlMain.add(btnSave, gbc); 

     JButton btnCancel = new JButton("Cancel"); 
     gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.EAST; 
     gbc.gridwidth = 1; 
     gbc.gridx = 3; 
     gbc.gridy = 4; 
     gbc.insets = new Insets(10, 0, 10, 10); 
     gbc.weightx = 1; 
     pnlMain.add(btnCancel, gbc); 

    } 

    public JPanel getUI(){ 
     return pnlMain; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Address Book"); 
       frame.getContentPane().add(new AddressBook().getUI()); 
       frame.setLocationRelativeTo(null); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
3

gbc.gridwidth पैरामीटर है जो एक घटक को एक से अधिक कॉलम तक फैलाने की अनुमति देता है। उदाहरण के लिए, यदि आपके पास 3 कॉलम और 4 पंक्तियां हैं और आप एक लेबल को पूर्ण शीर्ष पंक्ति पर कब्जा करने के लिए चाहते हैं, तो आपको लेबल के लिए पहला सेल असाइन करने की आवश्यकता है। और जीबीसी सेट करें।ग्रिडविड्थ = 3;

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