Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WawelDragon

[Resolvido] Problemas com GridBagLayout e JList

Recommended Posts

Pessoal, estou tendo um problema ao inserir strings em um JList com DefaultListModel.

A questão é a seguinte: o frame tem um JPanel que está utilizando GridBagLayout, "basicamente" dividido em dois (na parte de cima, existem diversos componentes, e na parte de baixo um outro JPanel com um JList inserido ocupando todo o espaço).

Bem, até aí tudo bem, consigo inserir strings. Porém, criei um pequeno sistema para essa string ser mostrada como uma "animação", as letras vão aparecendo de 50 em 50ms, mais ou menos assim:

 

String texto = "textotextotexto";
String aux;
for (int i = 0; i < texto.length(); i++){

  try{
     Thread.sleep(50);
  }  catch (InterruptedException e){
     e.printStackTrace();
  }
  aux = texto.substring(0, i);
  model.removeAllElements();
  model.addElement(aux);
}

 

Até aí, tudo bem, a string vai sendo mostrado da forma como deveria, porém, enquanto a string vai sendo adicionada, os componentes que estão na parte de cima do GridBagLayout começa meio que a "se mexer" até que a string esteja toda inserida, como se o layout estivesse sofrendo alterações a cada adição de string que o programa faz. Já tentei alterar diversas coisas no programa, porém não consigo solucionar esse problema! Alguém tem alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o problema está no método removeAllElements do modelo da lista. Ao remover todos os elementos da lista, o seu tamanho reduzirá dependendo do seu layout.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vergil,

 

Acho que você deve estar certo. Tentei tirar essa animação, de forma a só limpar a última string com removeAllElements e adicionar a nova. Não deu pra perceber nenhuma mudança drástica no layout. Porém eu gostaria de manter essa forma de exibição da string. Será que existe alguma outra alternativa para isso? Talvez fixar o tamanho do modelo(?) ou da lista?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, poderia fazer o seguinte. Ter o seu JFrame usando o BorderLayout. Podendo colocar um painel no norte e outro painel no centro. Seriam dois painéis ocupando todo o frame, um sobre o outro. Daí no de cima você coloca os demais componentes e no de baixo você coloca a sua lista. Dessa forma você não terá problemas com leiaute. Em cada painel (superior ou inferior) você poderá definir qualquer outro leiaute de sua preferência. Testa isso e depois me diz se funcionou. :natalwink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vergil,

 

Após muito quebrar a cabeça, consegui encontrar uma solução. Tentei primeiramente como o BorderLayout como você tinha indicado porém o problema ocorria no mesmo: os componentes mexiam conforme a string era inserida. Tentei então utilizar o GridBagLayout no frame para dividi-lo em dois com dois Panels e o problema foi o mesmo. Porém, com o GridLayout funcionou perfeitamente. Tive que adaptar um pouco os componentes (deixando o frame com 3 linhas e 1 coluna) já que não dava pra redimensionar as células. Dessa forma dividi os componentes que ficavam na parte de cima entre as duas primeiras linhas do GridLayout, e o Panel com o JList na terceira linha. Dessa forma a string é inserida sem que os componentes fiquem "pulando" por aí.

Obrigado pela ajuda! :natallaugh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que tenha resolvido. E obrigado por informar a solução do problema!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.