Почему GridBagLayout не создает третий столбец?

Мне нужно создать форму с 3 столбцами и 5 строками

+---+-----------+
|   |           |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
+---+-----+-----+

Но GridBagLayout помещает все элементы в форму с двумя столбцами:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Lab7_3 {

    public static void main(String[] args) {
        buildFrame("Groups");

    }

    public static void buildFrame(String name){
        JFrame fr = new JFrame(name);

        //Создание переключателя окна
            JButton JBMore=new JButton("<html>><br/>><br/>></html>");
        //Создание переключателя окна

        //Создание последней - информационной панели
            JPanel jp2 = new JPanel(new GridBagLayout());
            GridBagConstraints c = new GridBagConstraints();

            JLabel jl = new JLabel("Select the person");

                ArrayList<JLabel> arrLabel = new ArrayList<JLabel>();
                ArrayList<JTextField> arrText = new ArrayList<JTextField>();
                for (int i=0;i<4;i++){
                    arrLabel.add(new JLabel(""));
                    arrText.add(new JTextField(""));
                    //jp2_2.add(arrLabel.get(i));
                    //jp2_2.add(arrText.get(i));
                }
                arrLabel.get(0).setText("Age:");
                arrLabel.get(1).setText("Address:");
                arrLabel.get(2).setText("Telephone:");
                arrLabel.get(3).setText("Favorite color:");

            c.insets = new Insets(0,0,0,0);
            c.gridheight = GridBagConstraints.REMAINDER;
            c.gridwidth = GridBagConstraints.RELATIVE;
            c.anchor = GridBagConstraints.WEST;
            c.fill = GridBagConstraints.VERTICAL;
            c.weighty = 1.0;
            c.weightx = 0.1;
            c.gridx = 0;
            c.gridy = 0;
            c.ipadx = 0;
            jp2.add(JBMore,c);  

            c = new GridBagConstraints();
            c.insets = new Insets(10, 10, 20, 10);
            c.anchor = GridBagConstraints.CENTER;
            c.gridheight = 1;
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.weightx = 1;
            c.weighty = 0.01;
            c.gridx = 1;
            c.gridy = 0;
            jp2.add(jl,c);

            c = new GridBagConstraints();
            c.insets = new Insets(2,10,10,10);
            c.gridwidth = 1;
            c.gridheight = 1;
            for (int i=0;i<4;i++){
                c.anchor = GridBagConstraints.WEST;
                c.fill = GridBagConstraints.NONE;
                c.gridx = 1;
                c.weightx = 0.05;
                c.gridy = 1+i;
                c.weighty = 0.05;
                c.ipadx = 0;
                jp2.add(arrLabel.get(i),c);

                c.anchor = GridBagConstraints.EAST;
                c.fill = GridBagConstraints.VERTICAL;
                c.gridx = 2;
                c.weightx = 0.05;
                c.ipadx = 10;
                //jp2.add(arrText.get(i),c);
            }


        //Создание последней - информационной панели

        fr.add(jp2);

        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setVisible(true);
        fr.pack();
        fr.setMinimumSize(fr.getSize());        
    }

}

Попробуйте раскомментировать эту строку [87]:

//jp2.add (arrText.get (i), c);

и вы увидите, что все элементы смещены влево


Комментарий строки 87:

Комментируемая строка [87

Некомментированная строка 87:

Некомментированная строка [87

1 ответ

Решение

GridBagConstraints.RELATIVE в ширине левого столбца означает оставить место справа только для одного столбца. Вы можете изменить ширину этой кнопки на 1,

Примечание:

Разве это не должно быть так:

<html>&gt;<br/>&gt;<br/>&gt;</html>

Другие вопросы по тегам