размещение компонентов в GridBagLayout не так, как ожидалось

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

public class GridBagLayoutDemo extends JFrame
{
private JFrame frame;
private JPanel panel;
private JLabel l1,l2,l3,l4,l5,l6,l7,l8;
private JRadioButton r1,r2,r3,r4,r5,r6,r7,r8;
private JTextField t1,t2,t3,t4;
private JComboBox c1;
GridBagConstraints gbc;
GridBagLayout  gbl;


public static void main(String[] args)
{
    new GridBagLayoutDemo();
}

public GridBagLayoutDemo()
{
    frame=new JFrame();
    panel=new JPanel();
    panel.setBackground(Color.YELLOW);
    gbl   = new GridBagLayout();  

    gbc = new GridBagConstraints(); 

    panel.setLayout(gbl);

    l1=new JLabel("passport");
    gbc.anchor = gbc.EAST;  
    gbc.gridx=0;
    gbc.gridy=0;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    //gbc.weightx=1.0;
    panel.add(l1,gbc);

    l2=new JLabel("pass no.");
    gbc.gridx=0;
    gbc.gridy=1;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l2,gbc);


    l3=new JLabel("Valid Upto");
    gbc.gridx=0;
    gbc.gridy=2;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l3,gbc);

    l4=new JLabel("Identification");
    gbc.gridx=0;
    gbc.gridy=3;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l4,gbc);

    l5=new JLabel("NO.");
    gbc.gridx=0;
    gbc.gridy=4;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l5,gbc);

    l6=new JLabel("Marital Status");
    gbc.gridx=0;
    gbc.gridy=5;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l6,gbc);

    l7=new JLabel("Nationality");
    gbc.gridx=0;
    gbc.gridy=6;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l7,gbc);

    l8=new JLabel("Type of Position");
    gbc.gridx=0;
    gbc.gridy=7;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(l8,gbc);

    r1=new JRadioButton("Yes");
    gbc.gridx=2;
    gbc.gridy=0;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r1,gbc);

    r2=new JRadioButton("No");
    gbc.gridx=4;
    gbc.gridy=0;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r2,gbc);

    r3=new JRadioButton("Married");
    gbc.gridx=2;
    gbc.gridy=5;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r3,gbc);

    r4=new JRadioButton("Unmarried");
    gbc.gridx=4;
    gbc.gridy=5;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r4,gbc);

    r5=new JRadioButton("Full time");
    gbc.gridx=2;
    gbc.gridy=7;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r5,gbc);

    r6=new JRadioButton("Part Time");
    gbc.gridx=3;
    gbc.gridy=7;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r6,gbc);

    r7=new JRadioButton("Contract Basis");
    gbc.gridx=4;
    gbc.gridy=7;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r7,gbc);

    r8=new JRadioButton("Intern");
    gbc.gridx=2;
    gbc.gridy=8;
    gbc.gridwidth=1;
    gbc.gridheight=1;
    panel.add(r8,gbc);


    t1=new JTextField();
    gbc.gridx=2;
    gbc.gridy=1;
    gbc.gridwidth=3;
    gbc.gridheight=1;
    panel.add(t1,gbc);

    t2=new JTextField();
    gbc.gridx=2;
    gbc.gridy=2;
    gbc.gridwidth=3;
    gbc.gridheight=1;
    panel.add(t2,gbc);

    t3=new JTextField();
    gbc.gridx=2;
    gbc.gridy=4;
    gbc.gridwidth=3;
    gbc.gridheight=1;
    panel.add(t3,gbc);

    t4=new JTextField();
    gbc.gridx=2;
    gbc.gridy=6;
    gbc.gridwidth=3;
    gbc.gridheight=1;
    panel.add(t4,gbc);





    frame.add(panel);

    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setSize(300,200);
    frame.pack();

    //c1=new JComboBox();
    //frame1();


}
}

В этом я добавил несколько меток, радиокнопок, текстовых полей. Радиокнопки и метки отображаются так, как я хочу, но текстовые поля не отображаются должным образом. Может ли кто-нибудь сказать мне, как заставить текстовые поля занимать больше места?

Вот как отображается графический интерфейс


person Apurva Patil    schedule 15.04.2012    source источник
comment
Этот графический интерфейс хорошо подходит для GroupLayout. Кстати, пожалуйста, обрежьте пустое пространство с изображений!   -  person Andrew Thompson    schedule 15.04.2012


Ответы (2)


Вероятно, вам следует рассмотреть возможность установки двух следующих значений для ваших ограничений для текстовых полей:

GridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
GridBagConstraints.weightx = 1.0;// If there is extra room horizontally, the textfields will receive it
person Guillaume Polet    schedule 15.04.2012

Поскольку для ваших JTextField не заданы свойства размера столбца, их предпочтительный размер будет довольно маленьким. Подумайте о том, чтобы указать размер столбца JTextFields по умолчанию:

public class GridBagLayoutDemo extends JFrame {
   private static final int TF_COLS = 10;

   // ....

   public GridBagLayoutDemo() {
      t1 = new JTextField(TF_COLS);
      t2 = new JTextField(TF_COLS);
      t3 = new JTextField(TF_COLS);
      t4 = new JTextField(TF_COLS);
      // ....
person Hovercraft Full Of Eels    schedule 15.04.2012