Can't precisely understand what and how to use the GridBagConstraints. As-Is vs. Should-Be
I am messing around with the GridBagLayout. I have understood it somewhat, hence was able to make this layout. but my As-Is is not matching with my should be. here are the screens.
As-Is :(
Should Be :sI understand that i have to tweak it a bit so that the size is set (setSize()
). But the real tricky one is getting the "Add Contact" JLabel
to be in the center at the top.
Here's My Code
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);
addCo开发者_如何学运维mponent(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);
}
}
If you take a look at the documentation of GridBagLayout, there's a fairly good example of GridBagConstraints usage.
Here's your code modified to use 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);
}
}
The output looks like this
精彩评论