Fixar tamanho de JLabel

Olá

Tenho o seguinte código:

JPanel panel1 = new JPanel();
panel1.setLayout = new GridLayout(2, 2, 10, 10));
Border border1 = BorderFactory.createEmptyBorder(20, 20, 20, 20); 
panel1.setBorder(border1);
panel1.setAlignmentX(Component.CENTER_ALIGNMENT);

JLabel label1 = new JLabel("Label1");
JLabel label2 = new JLabel("Label2");
JLabel label3 = new JLabel("Label3");
JLabel label4 = new JLabel("Label4");

panel1.add(label1);
panel1.add(label2);
panel1.add(label3);
panel1.add(label4);

Esse panel1 vai dentro de um GridBagLayout. Quero fixar o tamanho dos JLabels, de maneira que quando mudar o texto de um deles, eles não sejam redimensiodos, mudando assim toda a disposição dos outros elementos na GUI. Tem como deixar os JLabels com tamanho fixo? Tentei usando o setPreferredSize() e num adiantou.

Coloquei uma borda e percebi que tem espaço sobrando nos JLabels, mas mesmo assim quando tamanho do texto aumenta, o JLabel automaticamente aumenta também. Como evitar que isso aconteça?

Agasea,

eu nunca precisei fazer isso, consequentemente eu nunca fiz.
Mas estive dando uma olhadinha na classe JLabel e não axei nenhum método que faça isso.

http://www.javadoconline.com/search.jsp?from=main&class=JLabel&action=pesquisa

Porque você não define as bordas fixas? Assim independente do tamanho do label, ele fica aparecendo somente dentro daquele espaço.

Não sei se vai resolver seu problema, mas é uma alternativa

Perdoe minha ignorância, mas não entendi como fixa as bordas…

Por dar um exemplo de código?

Obrigado!!

oi,
Eu não consegui entender seu problema…
Você quer definir o tamanho de um label?
e se a palavra for mair que o tamanho escolhido?

Ou como você utiliza GridBagLayout e não esta conseguindo mudar a posição deles?

Então, não tem risco de a palabra ficar maior do que o tamanho que eu fixar para o JLabel.

E colocando a borda, vejo que há uma espaço grande não utilizado pelo texto do JLabel. Mesmo assim quando altero o valor ele aumenta de tamanho.

O que eu quero é que ele fique do mesmo tamanho sempre, porque quando ele cresce por eu estar usando o GridBagLayout os demais elementos são ajustados.

Só que usando setLayout(null) você precisaria definir o posicionamento e tamanho de todos os componentes, certo?

se vc não precisar redimensionar o Container onde estão seus componentes, use setBounds() para fixar seus componentes. Na minha opinião, o uso de layouts só é vantagem quando é preciso redimensionar o Container.

Oi,
como você esta usando uma borda em seu painel,
as opções setBounds e setSize não fazem efeitos…
então tudo que você jogar dentro de um JPanel com bordas,
as propiedades de tamanho são definidas por ele… deixando centralizado
na maioria das vezes.

Para isso monte seu painel com bordas com um Layout GridBad:

[quote]
//
// Cria o painel para legenda.
//
io_pn_legenda = new JPanel();
io_pn_legenda.setBounds(10,280,350,74);
io_pn_legenda.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
io_ct.add(io_pn_legenda);

//
// Cria o Label da legenda.
//
io_lb_legenda = new JLabel();
io_lb_legenda.setText(“lalalalala”);

//
// Cria o Layout.
//
GridBagLayout
layout = new GridBagLayout();
GridBagConstraints
c1 = new GridBagConstraints();
io_pn_legenda.setLayout(layout);

//
// Define as posições (onde vai estar seu JLabel).
//
c1.fill = GridBagConstraints.BOTH;
c1.gridy = 1; // primeira linha
c1.gridx = 0; // primeira coluna
c1.weightx = 1;
c1.gridwidth = 2; // Ocupar duas colunas
layout.setConstraints(io_lb_legenda, c1);

//
// Adiciona a legenda ao painel.
//
io_pn_legenda.add(io_lb_legenda);[/quote]

Bom,
como falado assim se você setar o Layout sendo null o setBounds funcionara…
porem, nem sempre é aconscelhavel o uso dele… sómente quando você que impossibilitar
o usuario de alterar o tamanho de sua tela.
Layouts são feitos para ajudar, mais no fundo no fundo é só incomodação hahahaha

Tchauzin!

O problema do NullLayout é que sua aplicação não ficará multi-plataforma pois, mesmo que você impressa o usuário de redimensionar a tela, quando rodar a aplicação numa outra plataforma fontes, bordas e até o aspecto dos componentes etc irão ser alterados. Além disso, é sempre bom deixar o usuário redimensionar a tela e aproveitar ao máximo o espaço que ele possui no desktop.

Faça a experiência: Depois de fazer tudo ficar bem bonito no Windows, tente rodar no Linux (ou vice-versa). Geralmente o resultado fica um lixo!!

Acho uma boa baixar o Eclipse e o Visual Editor, montar tudo em null e depois trocar para GridBagLayout. O VE automaticamente criará todos os “bounds” que você necessita e ainda deixará você atualiza-los de maneira visual.

Você ainda pode definir manualmente parâmetros como as margens dos componentes e como eles vão se esticar, onde eles vão se ancorar, etc, ajustando assim o comportamento quanto a tela for redimensionada.

O resultado final é muito bom, multi-plataforma e permite que o usuário estique a janela o quanto quiser!

Oi,
não sabia que usar um Layout null em outras plataformas não iria funcionar.
pois só trabalho em Linux mesmo.

Quanto ao que você disse sobre deixar o usuario redirecionar a tela esticar, puxar, em fim,
é claro que existem telas ou programas que isso é necessario… mais agora se for uma simples
tela de cadastro ou uma de senha não acho necessario o uso de Layout.

Uma coisa que também não concordo é usar um Visual Editor, mais já é uma outra discução.
Cada um deve baixar plataformas e escolher, é que nem religião e time de futebol =)

Vou fazer experimentos sobre o assunto multi-plataforma… foi bom saber disso.

Tchauzin!

Eu entendi sua pergunta, já passei por este problema.

Ao mudar um jLabel com um comando “setText()” o seu tamanho também muda, mesmo que o espaço do jLabel seja suficiente. Aumentar ele requer mais espaço e acaba comprometendo todo layout do painel. Isto é um verdadeiro pé no saco.

Para solucionar o problema eu uso jTextFields ao invés do jLabel, eles não mudam de tamanho, no máximo você vai cortar o texto se colocar uma String muito grande para o tamanho do jTextField.

Obviamente a aparência do jTextField é diferente, e as vezes não apropriada, para isso coloque a borda como Empty e coloque como um componente não editável.

Pronto! Seu problema está resolvido!!!

Eu uso o Null Layout

JLabel.setBounds(X, Y, Largura, Altura);

t+

Sim, dessa forma fica bem mais facil vc deixar do jeitop q vc qr!

Assino embaixo.