Como definir a largura de um JButton?

10 respostas
street

Olá a todos!

Fiz uma aplicação simples com um menu de botões a esquerda, dentro de um JPanel. Estes botões estão todos dentro de uma Box, que por sua vez está no JPanel.
Ocorre que os botões tem larguras diferentes, conforme os seus textos. Tem algum jeito de deixa-los com a mesma largura?

Tentei o método JButton.setSize(int i, int j), achando que ia funcionar, mas não faz nada :?

O código é basicamente este:

public TelaPrincipal() {
	
		//SETANDO OS LAYOUTS
		this.setLayout(new BorderLayout());

		//ADICIONANDO OS OBJETOS NOS RESPECTIVOS PAINEIS
		Box menu = Box.createVerticalBox();
		menu.add( Box.createRigidArea(new Dimension(10,20) ) );
		menu.add(btn_1);		menu.add( Box.createVerticalStrut(5) );
		menu.add(btn_2);		menu.add( Box.createVerticalStrut(20) );
		menu.add(btn_3);		menu.add( Box.createVerticalStrut(5) );
		menu.add(btn_4);		menu.add( Box.createVerticalStrut(200) ); 
		menu.add(btn_5);
		
		pnl_menu.add(menu);

		//ADICIONANDO NA TELA
		this.add(pnl_2, BorderLayout.CENTER);
		this.add(pnl_menu, BorderLayout.WEST);
	}

Obrigado!

10 Respostas

Guevara

Se vc usa Netbeans, é muito mais fácil que isso.
Selecione um botão pressione o shift e clique em outros, depois solte e clique com o direito em cima de um botão, selecione a opção “same size”, depois “same width” (largura) ou “same height” (altura), conforme mostra a figura abaixo.

[]s

davidtiagoconceicao

street, o setSize parece não fazer nada por causa do gerenciador de layout que você setou na linha 04. O BorderLayout irá ajustar o tamanho do botão conforme o local que você adiconou ele. Se você quizer configurar o tamanho manualmente, vai ter que setar o layout como null. Mas nesse caso, vai ter que configurar o tamanho e a posição de todos os componentes da tela.

Link_pg

Olá!

Como o amigo disse aí em cima, dependendo do gerenciador do layout, os métodos que ajustam o tamanho dos componentes não surtem efeito. O GridBagLayout, por exemplo, é baseado em colunas e linhas, portanto o componente vai variar de acordo com o tamanho da coluna e da linha em que ele está inserido. Outro layout que não permite alteração no tamanho dos componentes é o BorderLayout, que é muito utilizado na criação do layout estrutural da tela, já que ele divide a tela em pontos cardeais (NORTH, SOUTH, EAST, WEST). Como o outro amigo também disse, tente usar o NetBeans :wink:

Abraços

davidtiagoconceicao
Como o outro amigo também disse, tente usar o NetBeans

Parem de tentar desviar o cara! :stuck_out_tongue:

Pelo que eu sei, o NetBeans, por padrão, o gerenciador de layout null. Isto é muito bom quando você quer montar a tela exatamente do jeito que você quer. Porém é péssimo quando você quer uma tela dinâmica (inclusão/exclusão de componentes), quer que a tela seja redimensionada livremente pelo usuário ou quer uma tela que se adapte às configurações do usuário (resolução do monitor, por exemplo).
Por isso, prefiro criar as telas escrevendo código e configurando os layouts para a tela se aproximar o máximo possível do desejado.

street

hehe Não tenho nada contra o NetBeans, mas eu tbm prefiro criar as telas no “codigão” :smiley:
acontece que sou novato ainda… então apanho um pouco =)

Mas se eu seto o layout como null, tudo some =(. Nesse caso, como faço o JPanel aparecer com as configurações que eu escolher?

vlw!!

davidtiagoconceicao

street:
hehe Não tenho nada contra o NetBeans, mas eu tbm prefiro criar as telas no “codigão” :smiley:
acontece que sou novato ainda… então apanho um pouco =)

Mas se eu seto o layout como null, tudo some =(. Nesse caso, como faço o JPanel aparecer com as configurações que eu escolher?

vlw!!

Sugestão: não configure o layout como null.
Mas se realmente quiizer fazer isso, você vai ter que configurar o tamanho e a posição de cada um dos componentes. Não sei ao certo qual é o tamanho padrão dos componentes (caso não seja configurado algum), mas sei que eles não aparecem na tela se não forem configurados.

street

Bom… não estou tendo muito sucesso deixando como null. :frowning:

Acho que vou optar por outros gerenciadores de layout e ver o que eu faço.

Por hora, muito obrigado a todos =D

davidtiagoconceicao

Uma coisa que eu costumo fazer e que a maioria dos iniciantes não fazem é criar vários JPanels dentro da JFrame.
Por exemplo, você pode criar um JPanel e adicionar ele como BorderLayout.SOUTH na sua JFrame. E este JPanel configurar com o layout que quiser.

Link_pg

Não se trata de “desviar” mas sim de dar uma sugestão… se ele não gostar, dai pode escolher não usar já que testou e não gostou :wink:

Quanto ao layout, o padrão do NetBeans não é null e sim o GroupLayout, que é muito complexo, mas com o Matisse podemos alcançar resultados interessantes. E eu concordo com o fato de sempre usar algum layout, pois as telas ficam bem mais profissionais. Existem técnicas para usar diferentes layouts juntos, utilizando vários containers, um dentro do outro. Cada layout tem um propósito, portanto sugiro estudá-los bem independemente se usar o Matisse ou criar o código na mão.

brenowbc

bem, já faz tempo que esse tópico está parado, mas alguem pode vir a consulta-lo mais tarde, assim como eu.

bem, eu consegui de duas maneiras, caso esteja usando GridBagLayout:

GridBagConstraints config = new GridBagConstraints();

  config.ipadx = int;  // só definir o tamanho
caso queira de outra maneira, use o setMargin para definir o espaçamento interno do JButton:
botao.setMargin(new Insets(int Acima, int Esqueda, int Abaixo, int Direita));

um abraço.

Criado 1 de março de 2009
Ultima resposta 3 de jun. de 2011
Respostas 10
Participantes 5