首页 文章

JTextField未在GridBagLayout中对齐

提问于
浏览
1

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

enter image description here

Component的网格宽度从上到下依次为:

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

    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.这就是为什么文本字段看起来比右侧的标签更靠近左侧的标签 . 如果宽度仍然是一个问题,你可以使用相同的技巧设置标签或文本字段的首选大小,如我建议的按钮 .
  • 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();}
        }
    

    使用此代码

相关问题