2015-06-24 112 views
0

我在GridBagLayout中对齐组件的主要问题,是的,我已经阅读了Oracle的教程并尝试改变weightx。GridBagLayout中的组件大小

这是怎么看起来像目前: enter image description here

基本上我需要实现的是:

JTextField的“诺姆”和“Filiação”一路延伸到左侧,就像“伊达德“和”图尔马“

底部JButtons是相同的大小,在中间对齐。

我希望有人能指出我在这里想念的东西。

这里有一个八九不离十SSCCE:

package test1; 

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Test1 { 
public static void main(String[] args) { 

    JFrame jf = new JFrame("Test"); 
    JPanel jp = new JPanel(new GridBagLayout()); 
    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; 
    jp.add(labelNome, gbc); 

    JTextField tfNome = new JTextField(); 
    gbc.gridx = 1; 
    gbc.ipadx = 50; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfNome, gbc); 

    JLabel labelIdade = new JLabel("Idade :"); 
    gbc.ipadx = 0; 
    gbc.gridx = 2; 
    gbc.fill = GridBagConstraints.NONE; 
    jp.add(labelIdade, gbc); 

    JTextField tfIdade = new JTextField(); 
    gbc.gridx = 3; 
    gbc.ipadx = 50; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfIdade, gbc); 

    JLabel labelEndereco = new JLabel("Endereço :"); 
    gbc.ipadx = 0; 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.fill = GridBagConstraints.BOTH; 
    jp.add(labelEndereco, gbc); 

    JTextField tfEndereco = new JTextField(); 
    gbc.ipadx = 50; 
    gbc.gridx = 1; 
    gbc.gridwidth = 3; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfEndereco, gbc); 

    JLabel labelFiliacao = new JLabel("Filiação :"); 
    gbc.ipadx = 0; 
    gbc.gridwidth = 1; 
    gbc.gridx = 0; 
    gbc.gridy = 2; 
    gbc.fill = GridBagConstraints.BOTH; 
    jp.add(labelFiliacao, gbc); 

    JTextField tfFiliacao = new JTextField(); 
    gbc.gridx = 1; 
    gbc.ipadx = 50; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfFiliacao, gbc); 

    JLabel labelTurma = new JLabel("Turma :"); 
    gbc.ipadx = 0; 
    gbc.gridx = 2; 
    gbc.fill = GridBagConstraints.BOTH; 
    jp.add(labelTurma, gbc); 

    JTextField tfTurma = new JTextField(); 
    gbc.gridx = 3; 
    gbc.ipadx = 50; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfTurma, gbc); 

    JLabel labelDisciplina = new JLabel("Disciplina :"); 
    gbc.ipadx = 0; 
    gbc.gridx = 0; 
    gbc.gridy = 3; 
    gbc.fill = GridBagConstraints.BOTH; 
    jp.add(labelDisciplina, gbc); 

    JTextField tfDisciplina = new JTextField(); 
    gbc.ipadx = 50; 
    gbc.ipady = 0; 
    gbc.gridx = 1; 
    gbc.gridwidth = 3; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    jp.add(tfDisciplina, gbc); 

    JButton adicionaDisciplina = new JButton("Adicionar disciplina"); 
    gbc.ipadx = 0; 
    gbc.gridwidth = 2; 
    gbc.gridx = 0; 
    gbc.gridy = 4; 
    jp.add(adicionaDisciplina, gbc); 

    JButton limparDisciplina = new JButton("Limpar lista de disciplinas"); 
    gbc.gridx = 2; 
    jp.add(limparDisciplina, gbc); 

    JButton botaoSalvar = new JButton("Salvar"); 
    gbc.gridx = 0; 
    gbc.gridy = 5; 
    jp.add(botaoSalvar, gbc); 

    JButton botaoCancelar = new JButton("Cancelar"); 
    gbc.gridx = 2; 
    jp.add(botaoCancelar, gbc); 

    jf.setSize(500, 550); 
    jf.add(jp); 

    jf.setVisible(true); 

} 

} 
+0

可能重复(http://stackoverflow.com/questions/31011894/jtextfield-not -aligning-in-gridbaglayout) – Madhan

+0

这是一个SSCCE的后续行动,我应该删除它吗? – Mojimi

+0

只需更新旧帖子上的代码并删除此代码 – Madhan

回答

2

JTextField的 “诺姆” 和 “Filiação” 伸展一路到左侧,就像 “Idade” 和 “Turma”

不知道这是什么意思。它们与第二列中的其他文本字段对齐。

由于“Endereco”标签长度较长,所以它们可能不会显示在最左边,因此第二列只能在结束时开始。

如果您希望文本字段具有相同的大小,那么您需要指定文本字段的大小,并且GridBagLayout将遵守大小。您可以通过在文本字段中指定的列时创建的文本字段中做到这一点:中[JTextField中没有的GridBagLayout对齐]

JTextField tfNome = new JTextField(10); 
+0

是的,我的意思是大小,因为该行中的两个文本字段都具有相同的GridBagConstraints设置,为什么它们的大小不一样? – Mojimi

+0

哇,这是一个令人难以置信的简单和容易的解决方案,谢谢 – Mojimi

+0

@Mojimi,GridBagLayout只能根据每个网格的大小分配空间。由于“Limpar ....”按钮的宽度比其他标签更宽,所以第3列和第4列将占用比第1列和第2列更多的空间。 – camickr