我刚刚开始使用 GridBagLayout
,下图很容易说明问题,我需要前 4 行中的第一个 JTextField
一直延伸到左侧的 JLabel
,就像右侧的一样。
组件的网格宽度从上到下为:
1, 1, 1, 1
1, 3
1, 1, 1, 1
1, 3
2, 2
2, 2
JFrame 中 GridBagConstraints
设置的代码:
另外,为什么即使我将 anchor 设置为“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);
最佳答案
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。这就是为什么右侧的文本字段看起来比左侧更靠近标签。 如果宽度仍然是一个问题,您可以使用相同的技巧为标签或文本字段设置首选大小,就像我为按钮建议的那样。
关于java - JTextField 在 GridBagLayout 中未对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011894/