GridBagLayout - Centralizando botões no JFrame

3 respostas
S

Boa noite pessoal,

Estou estudando Interface Gráfica no Java e estou com dificuldade ao usar o GridBagLayout.
Nas minhas leitura parece que o GridBagLayout é muito usado para desenhar as telas, porém o GridBagLayout trabalha em grade e assume suas larguras e alturas.

Estou fazendo uma simples tela de login mas não estou conseguindo centralizar os botões de "OK" e "Cancelar", ele assume o tamanho do grid já definido.
Gostaria que os botões ficassem centralizados e com larguras iguais.

Vejam como está ficando a tela:

[img]http://img35.imageshack.us/img35/6530/loginexemplo.jpg[/img]

O código:
public class TelaLogin extends JFrame {
	
	private GridBagLayout layout;
	private GridBagConstraints constraints;
	
	//criando GUI
	public TelaLogin() {
		super("Autenticação");
		this.setLocationRelativeTo(null);
		layout = new GridBagLayout();
		setLayout(layout);
		constraints = new GridBagConstraints();
		
		//criando componentes na GUI
		JLabel userLabel = new JLabel("Usuário: ");
		JLabel passLabel = new JLabel("Senha: ");
		JTextField userTextField = new JTextField(10);
		JPasswordField userPasswordField = new JPasswordField(10);
		JButton okButton = new JButton("OK");
		JButton cancelButton = new JButton("Cancelar");		
		
		constraints.insets = new Insets(3, 3, 3, 3);
		constraints.anchor = GridBagConstraints.EAST;
		addComponent(userLabel, 0, 0, 1, 1);
		addComponent(userTextField, 0, 1, 1, 1);
		addComponent(passLabel, 1, 0, 1, 1);
		addComponent(userPasswordField, 1, 1, 1, 1);
		constraints.fill = GridBagConstraints.HORIZONTAL;
		addComponent(okButton, 2, 0, 1, 1);
		addComponent(cancelButton, 2, 1, 1, 1);		
		
	}
	
	private void addComponent(Component component, int linha, int coluna, int largura, int altura) {
		constraints.gridx = coluna;
		constraints.gridy = linha;
		constraints.gridwidth = largura;
		constraints.gridheight = altura;
		layout.setConstraints(component, constraints);
		add(component);
	}
}

3 Respostas

Eric_Yuzo

Os botões estão assumindo o tamanho da grade por causa do:

Isto faz com que os botões se redimensionem para ocupar todo espaço horizontal disponível na célula.

Se você não quer que os botões fiquem alinhados a grade, crie um painel independente com FlowLayout, por exemplo, e adicione ao seu painel principal.

S

Eric Yuzo:
Os botões estão assumindo o tamanho da grade por causa do:

Isto faz com que os botões se redimensionem para ocupar todo espaço horizontal disponível na célula.

Se você não quer que os botões fiquem alinhados a grade, crie um painel independente com FlowLayout, por exemplo, e adicione ao seu painel principal.

JPanel = GridBagLayout
Jpanel = FlowLayout

é mais ou menos por ai ?

Eric_Yuzo

starke:
JPanel = GridBagLayout
Jpanel = FlowLayout

é mais ou menos por ai ?


Na parte que você adiciona os botões, você cria um outro painel apenas para receber os dois botões. Então adiciona este novo painel e manda ele ocupar as duas colunas de baixo.

Para uma tela simples como esta, não poderia usar um LayoutManager mais simples?

Criado 15 de abril de 2012
Ultima resposta 15 de abr. de 2012
Respostas 3
Participantes 2