Dúvida sobre o .getHeight() em Jtable após resize

8 respostas
vini.roggia

Boa tarde,

Estou com a seguinte dúvida:
Tenho uma tabela que inicia com 0(Zero) linhas, clico em um botão no qual inicia um evento e este lista registros nesta tabela.
Gostaria que a barra de rolagem, fosse para baixo automaticamente então fiz o seguinte:

private void btListarTodosMousePressed(java.awt.event.MouseEvent evt) {                                           
// TODO add your handling code here:
    this.jogaNaTabela();    
    spAtendimento.getVerticalScrollBar().setValue(tbAtendimento.getHeight());

}

Mas ela não rolou atomaticamente, então cliquei novamente no botão para que ele listasse novamente e ai ele rolou.
Então coloquei um System.out pra ver qual valor estava retornando na primeira vez que eu clicava no botão, e deu ZERO(o valor no qual iniciava a tabela).
Agora... Porque ele não atualiza o valor do getHeight após eu listar e só na segunda vez que aciono o evento ele pega o valor correto?

8 Respostas

lina

Oi,

olha isso:

http://www.guj.com.br/posts/list/117509.java#636258

e melhor ainda.

http://www.guj.com.br/posts/list/53230.java[url]
Tchauzin!

vini.roggia

Boa tarde Lina,

Então, já é o que estou fazendo. o teu scroll é o meu spAtendimento.
O que acontece é o seguinte:
Clico no botão e ele lista tudo de uma vez e deveria rolar pro fim, só que o getHeight esta retornando 0 zero(que era o valor inicial da tabela).
E ele só funciona se eu clico pela segunda vez que dai ele retorna o valor certo do getHeight, como se ele só desse um “refresh” nas propriedades
da tabela quando eu saio do meu evento.
Existiria algum “REFRESH/RELOAD” da JTable para ele retornasse o valor correto do getHeight?

Marky.Vasconcelos
table.getPreferredSize().height;
vini.roggia

Ponto para Mark.
Realmente, o .getPreferredSize().height; retorna o valor correto (atualizado)
Dúvida, qual a diferença do getPreferredSize().height; e tabela.getHeight(); ?
Outra coisa, continuo com o problema da mesma forma.
O código teria ficado:

private void btListarTodosMousePressed(java.awt.event.MouseEvent evt) {                                           
// TODO add your handling code here:
    this.jogaNaTabela();//método que lista os registros na tabela
    spAtendimento.getVerticalScrollBar().setValue(tbAtendimento.getPreferredSize().height);

}

Mas ele lista todos os registros na tabela mas não rola a barra até o fim, mas se eu clico novamente no botão ele rola.
O que pode ser?

Marky.Vasconcelos

Se não me engano isso por que o método getHeight retorna getSize().height. Mas o LayoutManager só seta o tamanho do PreferredSize, por isso funciona.

Marky.Vasconcelos

Ahh… sobre a ScrollBar.

spAtendimento.getVerticalScrollBar().setValue(spAtendimento.getVerticalScrollBar().getMaximum());
vini.roggia

o tabela.getHeight é o mesmo que tabela.getBounds.getHeight, mas não sei porque essa opção não da um “refresh” sendo que o preferredSize tras o valor correto.
O getMaximum retorna o mesmo valor do .getHeight(), sendo que na segunda vez que eu clico ele retorna o valor correto.
Mas o que eu acho estranho é que o preferredSize retorna o valor certo mas mesmo assim não rola a barra, só na segunda vez que eu clico.
Alguma idéia?

vini.roggia

Será que existe o tal RELOAD/REFRESH pra JTable?
Pois quando ele sai do evento de mouse pressionado e eu clico novamente no botão ele rola até o final, se existisse esse “reload” eu poderia colocar no fim do evento.

Criado 20 de julho de 2009
Ultima resposta 21 de jul. de 2009
Respostas 8
Participantes 3