||| JScrollPane |||

E a ai pessoal tudo bem !!!
Estou com um probleminha e preciso de ajuda .

Eu criei uma tabela e inseri ela em um JScrollPane, com o objetivo de criar uma barra de rolagem vertical caso o numero de linhas seja maior que a janela do JScrollPane , ate ai tudo bem !! mas eu gostaria de saber como faço para tornar visivel determinada linha da tabela sem mover a barra de rolagem com o mouse. Por default a tabela é mostrada com a barra de rolagem na posição superior !! no meu caso preciso que ela seja inicializada na posição que eu especificar !!! Será que é possível ?

Uma abraço a todos !!!

Renato Ferrari

fragmento do codigo de criação da tabela .

final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));

JScrollPane scrollPane = new JScrollPane(table);

Você pode usar diretamente o método changeSelection(int, int, boolean, boolean). Da seguinte forma:

tabela.changeSelection(1024, 12, false, false);

Isso fará com que a linha 1024 e a coluna 12 seja selecionada
(consulte a API para maiores detalhes).

Você também pode fazer pelo modelo de seleção (ListSelectionModel):

ListSelectionModel sm = tabela.getSelectionModel(); sm.setSelectionInterval(1024, 1024);

O problema com esse último é que você deverá notificar a tabela que ocorreu uma mudança na seleção para que o viewport seja atualizado.

Espero ter ajudado.

Olá pessoal !!!

Agradeço pela atenção , mas continuo com o problema .
O método tabela.changeSelection(int, int, boolean, boolean) , inicializa a tabela com determinada célula selecionada , mas não move o JScrollpane para a posição desta célula. O que eu preciso na verdade é um método para mover o JScrollPane sem usar o mouse .

Um abraço a todos !!!

Renato

Olha, eu fiz um teste aqui e criei uma tabela com 2 colunas e 500 linhas numa janela de 300x300… através do método JTable.changeSelection() funciona belezinha…

meu teste é baseado no seguinte: tenho a tabela ao centro em um JScrollPane e um botão num JPanel inferior… a janela aparece e quando clico nesse botão o handler chama o método changeSelection() com um número de linha aleatório (no intervalo de linhas existentes) funfa legal…

Valeu dango !!!

É isso ai cara !! testei novamente e funciona !!!

Muito Obrigado !!!

Renato

Triste isso, né?? A JList tem um método ensureIndexIsVisible(int), que faz exatamente isso. A JTable podia ter dois, um pra linhas e um pra colunas…

tsk, tsk…

[]s

Sei que serei crucificado, mas eu realmente sinto que existe uma falta de coesão/coerência nos componentes Swing (não que outras linguagens tenham) mas – não sei explicar – sinto que falta muito ainda em termos de UI.

Um exemplo é o fato do JTable ter sido projetado para exibir colunas do mesmo tipo (mesma classe, mesmo renderer)…; isso é odiável…; sei que existem workarounds, entretanto, porém…