我正在搞乱GridBagLayout。我有点理解它,因此能够做出这种布局。但是我的As-Is与我应该的不匹配。这是屏幕。
原样:(
应该是: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);
}
}
答案 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);
}
}
输出看起来像这样