Не могу точно понять, что и как использовать GridBagConstraints. Как есть против должно быть - PullRequest
0 голосов
/ 03 мая 2011

Я возился с GridBagLayout. Я понял это несколько, поэтому смог сделать этот макет но мой As-Is не совпадает с моим. вот экраны.

как есть :( As-Is :(

Should Be :s
Должно быть: s

Я понимаю, что мне нужно немного его настроить, чтобы размер был установлен (setSize()). Но настоящая хитрость заключается в том, чтобы «Добавить контакт» JLabel находился в центре вверху.
Жду ваших ответов. Заранее спасибо.

Вот мой код

package SimpleCRUD;

import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

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

@SuppressWarnings("serial")
public class ContactListFrame extends JFrame{
    JButton Button1, Button2;
    JTextField textField1, textField2, textField3;
    JLabel label1, label2, label3 , label4;
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints Constraint = new GridBagConstraints();

    public ContactListFrame() {
        super("All Contacts");
        Button1 = new JButton("Add");
        Button2 = new JButton("Cancel");
        textField1 = new JTextField(15);
        textField2 = new JTextField(15);
        textField3 = new JTextField(15);
        label4 = new JLabel("Add Contact");
        label4.setFont (new Font("fallan", 1, 25));
        label1 = new JLabel("First Name:");
        label2 = new JLabel("Last Name:");
        label3 = new JLabel("Phone Number:");

        setLayout(layout);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(400, 200);
        setResizable(false);
        Constraint.fill = GridBagConstraints.NONE;
        Constraint.anchor = GridBagConstraints.NORTH;
        addComponent(label4, 0, 1, 1, 1);
        addComponent(textField1, 1, 1, 1, 1);
        addComponent(textField2, 2, 1, 1, 1);
        addComponent(textField3, 3, 1, 1, 1);
        addComponent(label1, 1, 0, 1, 1);
        addComponent(label2, 2, 0, 1, 1);
        addComponent(label3, 3, 0, 1, 1);
        addComponent(Button1, 4, 0, 2, 1);
        addComponent(Button2, 4, 1, 2, 1);
    }

    public void addComponent (Component comp, int row, int col, int width, int height){
        Constraint.gridx = col;
        Constraint.gridy = row;
        Constraint.gridwidth = width;
        Constraint.gridheight = height;
        layout.setConstraints(comp, Constraint);
        add(comp);
    }

}

1 Ответ

1 голос
/ 03 мая 2011

Если вы посмотрите на документацию GridBagLayout , есть довольно хороший пример использования GridBagConstraints.

Вот ваш код, модифицированный для использования GridBagConstraints

import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import java.awt.Insets;

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


public class ContactListFrame extends JFrame{
    JButton Button1, Button2;
    JTextField textField1, textField2, textField3;
    JLabel label1, label2, label3 , label4;
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints Constraint = new GridBagConstraints();

    public ContactListFrame() {
        super("All Contacts");
        Button1 = new JButton("Add");
        Button2 = new JButton("Cancel");
        textField1 = new JTextField(15);
        textField2 = new JTextField(15);
        textField3 = new JTextField(15);
        label4 = new JLabel("Add Contact");
        label4.setFont (new Font("fallan", 1, 25));
        label1 = new JLabel("First Name:");
        label2 = new JLabel("Last Name:");
        label3 = new JLabel("Phone Number:");

        setLayout(layout);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 200);
        setResizable(false);
        Constraint.fill = GridBagConstraints.BOTH;
        Insets ins = new Insets(5, 5, 5, 5);
        Constraint.insets = ins;//this does the padding
        Constraint.weightx = 0.0;
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(label4, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label1, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField1, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label2, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField2, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label3, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField3, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(Button1, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(Button2, Constraint);
    }        

    public static void main(String args[]) {
      new ContactListFrame().setVisible(true);
    }
}

Вывод выглядит так

enter image description here

...