无法准确理解GridBagConstraints的用途和方法。原则与应有之道

时间:2011-05-03 15:23:47

标签: java swing gridbaglayout

我正在搞乱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 个答案:

答案 0 :(得分:1)

如果你看一下documentation of 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