我有两个Java课程:
GridBagLayout
,所以我可以将class2的实例添加到列表中。 我的代码如下:
的Class1
class2 one = new class2();
class2 two = new class2();
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(6,2,6,40);
gbc.gridx = 0;
this.add(new JLabel("Name"), gbc);
gbc.gridx = 1;
this.add(new JLabel("Surname"), gbc);
gbc.gridx = 2;
this.add(new JLabel("Age"), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
this.add(one, gbc);
gbc.gridy = 2;
this.add(two, gbc);
Class2扩展了JPanel
this.setLayout(new GridBagLayout());
GridBagConstraints gridBagCons = new GridBagConstraints();
gridBagCons.insets = new Insets(6,2,6,4);
gridBagCons.gridx = 0;
this.add(new JTextField(10), gridBagCons);
gridBagCons.gridx = 1;
this.add(new JTextField(10), gridBagCons);
gridBagCons.gridx = 2;
this.add(new JTextField(10), gridBagCons);
因此,它不起作用,它显示标题:我想要的名称,姓氏和年龄,以及从class2的GridBagLayout的第一列内的class2导入的另外两个面板。 我想将标题与从class2导入的文本字段对齐。
拜托,请你帮个忙。
答案 0 :(得分:0)
您需要在gridwidth
上设置GridBagConstraints
。您的示例创建一个3x3网格。标题位于第一行。在第二行,第一个位置包含整个Class2
面板,第2列和第3个列没有任何内容。第3行也一样。
把
gbc.gridWidth = 3;
在添加Class2
小组之前。
要对齐文本字段,请输入
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
表示“标题”的每个标签和第2类的每个文本字段。手动设置插图不会正确调整大小。
答案 1 :(得分:-1)
您可以手动调整插图
gbc.insets = new Insets(6,2,6,90);
gbc.gridx = 0;
this.add(new JLabel("Name"), gbc);
gbc.insets = new Insets(6,0,6,-20);
gbc.gridx = 1;
this.add(new JLabel("Surname"), gbc);
gbc.insets = new Insets(6,0,6,0);
gbc.gridx = 2;
this.add(new JLabel("Age"), gbc);
gbc.gridx = 0;
gbc.gridwidth = 3;
gbc.gridy = 1;
this.add(one, gbc);
gbc.gridy = 2;
this.add(two, gbc);
虽然您可能最好不要使用第二个类,并根据您的实现以其他方式添加文本字段。
修改:以下是使用GridLayout
public class AddingFields {
static GridLayout gl = new GridLayout(2, 3, 20, 10);
static JFrame frame = new JFrame();
public static void main(String[] args) {
new AddingFields();
createAdderFrame();
}
AddingFields() {
frame.setLayout(gl);
frame.add(new JLabel("Name"));
frame.add(new JLabel("Surname"));
frame.add(new JLabel("Age"));
frame.add(new JTextField(10));
frame.add(new JTextField(10));
frame.add(new JTextField(10));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
static void createAdderFrame() {
JFrame adder = new JFrame();
JButton addButton = new JButton("Add row");
adder.add(addButton);
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gl.setRows(gl.getRows() + 1);
frame.add(new JTextField(10));
frame.add(new JTextField(10));
frame.add(new JTextField(10));
frame.pack();
}
});
adder.pack();
adder.setVisible(true);
}
}