Validacao em JTable editavel com tabela MySQL

7 respostas
Luiz_Seadorf

Montei uma JTable e queria editar os registros de uma tabela . Consegui fazer a JTable incluir um registro novo, deletar e alterar. O problema esta’ sendo fazer validacao de campos . Muito enrolado de fazer. Eu queria impedir sair de uma linha nova sem que todos os dados fossem validos mas a JTable deixa. Nem quando eu estou posicionado num campo obrigatorio, ela deixa sair. Muito dificil controlar o foco. Vejo todo mundo usar a JTable apenas para vizualizar a tabela, colocando controles button para abrir um frame para edicao. Sera’ que alguem aqui ja’ fez a edicao na JTable direto e pode me dar umas dicas ?? Obrigado…

7 Respostas

Luiz_Seadorf

Aproveitando que ainda nao me responderam tenho mais uma duvida. Eu queria que a JTable iniciasse posicionando e selecionando em um determinado registro em vez de apresentar sempre os primeiros registros. Existe algum metodo da JTable para isso ? Valeu…

brlima
public void setRowSelectionInterval(int index0, int index1)

passando (0,0) para a linha 0, (1,1) para a linha 1 e assim por diante.

Não é tão complicado assim dependendo do resultado que vc queira. Se pra vc basta, vc pode colocar um listener no TableModel pra escutar alteração no modelo da JTable ( que é quando vc termina de digitar e a celula perde o foco ). Dai vc pode validar o que vai parar no modelo da tabela. Se o cara digitar algo, esse algo vai para o modelo. Se vc interfirir, vai ser como o cara nao ter digitado nada. Acho que esse é o mais facil.
Fora esse, vc pode implementar o celleditor para validar quando a celula for parar a edição, mas tem que ficar esperto quando o foco passar pra outros componentes, se realmente a sua celula vai parar a edição. Uma dica seria colocar um focus listener no componente CellEditor para forçar um StopEditingCell da Jtable. Ai força parar a ediçao toda vez que perder o foco.

flw!

Luiz_Seadorf

Oi, vale a resposta.
Testei a addRowSelectionInterval mas nao funcionou como eu queria. Ela realmente seleciona a linha porem nao faz a tabela rolar ate’ posicionar na linha que eu escolhi. Por exemplo se eu estiver no primeiro registro de uma tabela com 1000 registros e der addRowSelectionInterval(500,510) eu gostaria que a JTable me mostrasse os registros 500 a 510 e selecionasse o Nr.500. Ele seleciona mas nao mostra na tela, eu e’ que tenho que ficar teclando PgDn ate’ chegar la’.

Quanto a validacao, eu gostaria de apertar um botao e a JTable inserisse uma linha nova no fim da tabela, redesenhando a tabela e me posicionando no primeiro campo dessa linha nova e eu so’ poderia sair dessa linha se editasse todos os campos obrigatorios e com dados validos.
Eu ate’ consegui fazer a JTable inserir a linha em branco no fim da tabela mas nao consigo fazer a tabela redesenhar e posicionar automaticamente nessa linha nova e travar o foco na linha ate’ editar todos os campos. Por exemplo, eu edito apenas o primeiro campo e teclo PgUp, ele deixar sair sem que eu edite os outros campos do registro.
Acho que agora deu para entender a minha dificuldade. Acredito que outros ja’ tiveram a mesma dificuldade com essa mardita JTable…

Sera’ que o unico jeito e’ abrir um dialog com um formulario para editar o registro e depois clicar num botao gravar ?

brlima

pra “rolar” até a linha selecionada, vc tem que fazer ‘na mão’…

Rectangle obj = tabela.getCellRect(numOfRows, 0, true);
tabela.scrollRectToVisible(obj);

dá uma olhada no método getCellRect() da JTable e seus parametros :wink:

flw!

keller

em vez de tentar mecher com a JTable para chegar até o fim…
mecha no JScrollPane muito mais simples… :wink:

Luiz_Seadorf

Testei a scrollRectToVisible e a getCellRect funcionou na boa …valeu mesmo.
Resta agora resolver o problema da validacao dos campos, de repente alguem tem uma ideia de como fazer…pensei em usar os mesmos metodos ( getCellRect , scrollRectToVisible e setRowSelectionInterval )para mover o foco de volta a linha que esta’ errada caso o usuario tente sair. Pode ser que funcione.

obrigado

brlima

É, pode até ser que funcione sim. Mas eu não deixaria o valor digitado ir pro TableModel :smiley: rssss…

Criado 8 de fevereiro de 2005
Ultima resposta 10 de fev. de 2005
Respostas 7
Participantes 3