我刚刚开始使用GridBagLayout
,下面的图片对问题非常不言自明,我需要前4行的第一个JTextField
一直伸展到左边的JLabel
,就像正确的那样。
组件的网格宽度从上到下为:
1,1,1,1
1,3
1,1,1,1
1,3
2,2
2,2
JFrame中GridBagConstraints
设置的代码:
另外,为什么即使我将锚设置为' NORTH',所有组件仍然在JPanel的中心对齐?
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
labelNome = new JLabel("Nome:");
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.BOTH;
add(labelNome, gbc);
tfNome = new JTextField();
gbc.gridx = 1;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfNome, gbc);
labelIdade = new JLabel("Idade :");
gbc.ipadx = 0;
gbc.gridx = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelIdade, gbc);
tfIdade = new JTextField();
gbc.gridx = 3;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfIdade, gbc);
labelEndereco = new JLabel("Endereço :");
gbc.ipadx = 50;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
add(labelEndereco, gbc);
tfEndereco = new JTextField();
gbc.ipadx = 50;
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfEndereco, gbc);
labelFiliacao = new JLabel("Filiação :");
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelFiliacao, gbc);
tfFiliacao = new JTextField();
gbc.gridx = 1;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfFiliacao, gbc);
labelTurma = new JLabel("Turma :");
gbc.ipadx = 0;
gbc.gridx = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelTurma, gbc);
tfTurma = new JTextField();
gbc.gridx = 3;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfTurma, gbc);
labelDisciplina = new JLabel("Disciplina :");
gbc.ipadx = 0;
gbc.gridx = 0;
gbc.gridy = 3;
gbc.fill = GridBagConstraints.BOTH;
add(labelDisciplina, gbc);
tfDisciplina = new JTextField();
gbc.gridwidth = 1;
gbc.ipadx = 50;
gbc.ipady = 0;
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfDisciplina, gbc);
adicionaDisciplina = new JButton("Adicionar disciplina");
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.NONE;
add(adicionaDisciplina, gbc);
limparDisciplina = new JButton("Limpar lista de disciplinas");
gbc.gridx = 2;
add(limparDisciplina, gbc);
botaoSalvar = new JButton("Salvar");
gbc.gridx = 0;
gbc.gridy = 5;
add(botaoSalvar, gbc);
botaoCancelar = new JButton("Cancelar");
gbc.gridx = 2;
add(botaoCancelar, gbc);
答案 0 :(得分:0)
GridBagLayout根据列中组件的首选大小调整列的大小。
由于“Limpar lista de disciplinas”占据的空间比“Adicionar disciplina”更多,所以底部的按钮会略微偏离你的宽度。如果您首先创建Limpar,则可以根据Limpar的首选宽度设置Adicionar的首选宽度。即。
JButton limparDisciplina = new JButton("Limpar lista de disciplinas");
JButton adicionaDisciplina = new JButton("Adicionar disciplina");
adicionaDisciplina.setPreferredSize(limparDisciplina.getPreferredSize());
左侧的标签是ipadx = 50,但是右侧的标签是ipadx = 0.这就是为什么文本字段看起来比右边的标签更靠近右边的标签。左边。 如果宽度仍然是一个问题,您可以使用相同的技巧设置标签或文本字段的首选大小,如我建议的按钮。
答案 1 :(得分:0)
import java.awt.*;
import javax.swing.*;
class example extends JFrame
{
public example()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
setSize(800,800);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
JLabel labelNome = new JLabel("Nome:");
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.BOTH;
add(labelNome, gbc);
JTextField tfNome = new JTextField();
gbc.gridx = 1;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfNome, gbc);
JLabel labelIdade = new JLabel("Idade :");
gbc.ipadx = 0;
gbc.gridx = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelIdade, gbc);
JTextField tfIdade = new JTextField();
gbc.gridx = 3;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfIdade, gbc);
JLabel labelEndereco = new JLabel("Endereço :");
gbc.ipadx = 50;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
add(labelEndereco, gbc);
JTextField tfEndereco = new JTextField();
gbc.ipadx = 50;
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfEndereco, gbc);
JLabel labelFiliacao = new JLabel("Filiação :");
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelFiliacao, gbc);
JTextField tfFiliacao = new JTextField();
gbc.gridx = 1;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfFiliacao, gbc);
JLabel labelTurma = new JLabel("Turma :");
gbc.ipadx = 0;
gbc.gridx = 2;
gbc.fill = GridBagConstraints.BOTH;
add(labelTurma, gbc);
JTextField tfTurma = new JTextField();
gbc.gridx = 3;
gbc.ipadx = 50;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfTurma, gbc);
JLabel labelDisciplina = new JLabel("Disciplina :");
gbc.ipadx = 0;
gbc.gridx = 0;
gbc.gridy = 3;
gbc.fill = GridBagConstraints.BOTH;
add(labelDisciplina, gbc);
JTextField tfDisciplina = new JTextField();
gbc.gridwidth = 1;
gbc.ipadx = 50;
gbc.ipady = 0;
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(tfDisciplina, gbc);
JButton adicionaDisciplina = new JButton("Adicionar disciplina");
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.NONE;
add(adicionaDisciplina, gbc);
JButton limparDisciplina = new JButton("Limpar lista de disciplinas");
gbc.gridx = 2;
add(limparDisciplina, gbc);
JButton botaoSalvar = new JButton("Salvar");
gbc.gridx = 0;
gbc.gridy = 5;
add(botaoSalvar, gbc);
JButton botaoCancelar = new JButton("Cancelar");
gbc.gridx = 2;
add(botaoCancelar, gbc);
setVisible(true);
}
public static void main(String aaa[]){new example();}
}
使用此代码