Problema com barra de rolamento de tabela[RESOLVIDO]
11 respostas
V
vasco.fred
Estou tendo problemas com a barra de rolamento de uma tabela.
É o seguinte, tenho uma tabela com vários contatos cadastrados, e um método para selecionar a linha de um determinado contato procurado.
A linha é selecionada numa boa, porém, se o contato estiver em uma posição pelo qual só se possa ser vizualizado baixando a barra de rolamento, ele não é vizualizado.
Resumindo, quero que a tabela abaixe o rolamento automatico quando necessário, para que o contato seja visualizado.
// Ensure that the cell (1,2) is visibleintrowIndex=1;intvColIndex=2;scrollToVisible(table,rowIndex,vColIndex);// Assumes table is contained in a JScrollPane. Scrolls the// cell (rowIndex, vColIndex) so that it is visible within the viewport.publicvoidscrollToVisible(JTabletable,introwIndex,intvColIndex){if(!(table.getParent()instanceofJViewport)){return;}JViewportviewport=(JViewport)table.getParent();// This rectangle is relative to the table where the// northwest corner of cell (0,0) is always (0,0).Rectanglerect=table.getCellRect(rowIndex,vColIndex,true);// The location of the viewport relative to the tablePointpt=viewport.getViewPosition();// Translate the cell location so that it is relative// to the view, assuming the northwest corner of the// view is (0,0)rect.setLocation(rect.x-pt.x,rect.y-pt.y);// Scroll the area into viewviewport.scrollRectToVisible(rect);
V
vasco.fred
Coloquei o código, porém não fez nada.
Pode me explicar melhor?
ferreira2006
Num codigo que fiz usei assim:
Tinha uma JTable listando uma série de coisas e um JTextField no qual se digitava o nome que se pretentia localizar;
Neste exemplo ele seta letra por letra, se digitar ‘a’ ele vai selecionar o primeiro registro que tenha ‘a’ no campo consultado, se digitar ‘ab’ o primeiro com ‘ab’ e assim por diante, tenta usar/adaptar aí:
// método que retorna um keyAdapterpublicKeyAdapterbuscaCampo(finalJTextFieldcampo,finalJTabletbl){KeyAdapterka=newKeyAdapter(){@OverridepublicvoidkeyReleased(KeyEventarg0){inttamanho=campo.getText().length();Stringnome=campo.getText();for(intlinha=0;linha<tbl.getRowCount();linha++){// 1 = coluna 1StringnumeroEquip=(String)tbl.getValueAt(linha,1);if((numeroEquip.length()>=tamanho)&&(numeroEquip.substring(0,tamanho).equals(nome.toUpperCase()))){tbl.setRowSelectionInterval(linha,linha);return;}}}};returnka;}JTextFieldpesquisaTextField=newJTextField(10);pesquisaEquip.addKeyListener(buscaCampo(pesquisaTextField,tabela));// a cada letra digitada sera realizada a busca considerando o que está digitado
Seguinte: no meu caso eu usava em um JTextField, ou seja adicionava o metodo criado com keyListner do meu JTextField.
Para você deveria ser ± assim:
V
vasco.fred
Continua sem nenhuma ação,porém, agora quando eu digito um nome, e o apago, a primeira linha é selecionada.
sabe dizer o que pode ser?
ferreira2006
teria que ve o teu código pra analizar…
Mas me diz uma coisa … o eu primeiro metodo tava funcionando o problema era o scrool que não mudava pra linha selecionada, certo?
ferreira2006
Tenta isso:
// Adicinar um SelectionListner em sua tabelatabela.getSelectionModel().addListSelectionListener(newListSelectionListener(){publicvoidvalueChanged(ListSelectionEvente){// O scroll se posicionará na linha que estiver selecionada tabela.scrollRectToVisible(tabela.getCellRect(tabela.getSelectedRow(),0,true));}});
V
vasco.fred
A questão é a seguinte.
Eu tenho uma tabela que tem um tamanho visualmente pequeno, que da apenas para ver 4 contatos, para ver os contatos restantes eu teria que abaixar a barra de rolamentos.
Ai se eu tiver uns 10 contatos cadastrados, e quiser buscar o contato 7, ele vai selecionar, porém, vai continuar mostrando os 4 primeiros contatos.
Então o que eu quero é que se eu buscar o contato numero 7,automaticamente, a barra desça.
Deu pra entender agora?