JTextField未在GridBagLayout中对齐

时间:2015-06-23 19:34:31

标签: java swing layout-manager gridbaglayout

我刚刚开始使用GridBagLayout,下面的图片对问题非常不言自明,我需要前4行的第一个JTextField一直伸展到左边的JLabel,就像正确的那样。

enter image description here

组件的网格宽度从上到下为:

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);

2 个答案:

答案 0 :(得分:0)

GridBagLayout根据列中组件的首选大小调整列的大小。

  1. 由于“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());
    
  2. 左侧的标签是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();}
    }

使用此代码