[RESOLVIDO]Pegar Valor da Proxima linha ou Anterior da Jtable

6 respostas
R

Seguinte estou tentando recuperar um valor da primeira coluna do meu Jtable Usando As teclas pra cima e pra baixo.
Até ai Tudo bem o problema é na hora de recuperar o valor,Pois quando aperto pra cima ou pra baixo ele me retorna o valor da linha atual e não da próxima, Alguém sabe alguma maneira de resolver isso??

jtable.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent ke) {
					
				         if ((ke.getKeyCode() ==  KeyEvent.VK_UP)  || (ke.getKeyCode() ==  KeyEvent.VK_DOWN)) {  
				          
				        	//Recupera o ID da linha da tabela em que foi cliclada 
			
						Object id = modelo.getValueAt(jtable.getSelectedRow(), 0);

						System.out.println(id);
								
							
				      
				            }  
				       
				
				}
			});
Exemplo Se Esta Selecionada a Linha 1 e aperto a seta para baixo ele me retorna o valor da coluna em que esta selecionado(1) e não o da próxima linha 2 [img]http://img40.imageshack.us/img40/3976/telae.png[/img]

6 Respostas

J
Object id = (int) modelo.getValueAt(jtable.getSelectedRow(), 0);
 if (ke.getKeyCode() ==  KeyEvent.VK_UP) { id--; }
else if (ke.getKeyCode() ==  KeyEvent.VK_DOWN) { id++; }

basta vc tratar se a linha for = 0 ou = ultima, e não incrementar/decrementar.

R

Deste Modo só funcionária se o Id estiver sempre em ordem sequencial 1,2,3,4… oque não é o caso, após o usuário realizar uma consulta ele pode retornar id como, 1,7,18,22… deste modo se eu estiver na linha 1 e aperta-se para baixo ele me retornaria 2 ao invés de 7.
Mais Muito Obrigado pela Resposta,talvez eu que não expressei o meu problema de forma correta.

N

Amigão, larga a mão de usar o DefaultTableModel. Olha a complicação que surgiu para você por algo bem simples, concorda?
Olha na minha assinatura o link de como criar seu próprio TableModel. Você vai trabalhar diretamente com objetos, sem a necessidade de ficar trabalhando com células individuais. Crie o seu TableModel individual que você vai resolver isso aí sem problemas. Nele, você vai criar um método chamado getAt(int row) ou coisa parecida, que te devolve o objeto da linha selecionada, e assim você vai resolver o problema!

R

Eu tenho meu proprio TableModel.
Porem quando aperto a seta para baixo ele me retorna a linha atual de quando foi chamado o evento
e em seguida seleciona a próxima linha sem retornar mais nada, talvez seja um erro de lógica da minha parte.

J

Sempre que você aperta a tecla ele retorna o valor da linha anterior ao evento da tecla? Se sim, por que só não retorna o getSelectedRow()+1 quando é tecla pra baixo e getSelectedRow()-1 quando é pra cima? Ou getSelectedRow() quando está nas bordas da tabela(elemento 0 ou elemento “tamanhodatabela”).

Provavelmente o seu listener tá pegando o evento antes da JTable.

R

Resolvido, Fiz assim como o JuniorMaia e o JoaoOliveira Disseram
Obrigado
Ficou assim:

jtable.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent ke) {
					
				         if ((ke.getKeyCode() ==  KeyEvent.VK_UP) ) {  
				  
				        	 if(jtable.getSelectedRow()>0){
						        	
				        	 
				        	 	Object id = modelo.getValueAt(jtable.getSelectedRow()-1, 0);

								System.out.println(id);
		
				        	 }
				            } else if ((ke.getKeyCode() ==  KeyEvent.VK_DOWN)) {
				            	
				            	if(jtable.getSelectedRow()+1<jtable.getRowCount()){
				            		
				            	
				            	Object id = modelo.getValueAt(jtable.getSelectedRow()+1, 0);

								System.out.println(id);
	
				            	}
				            } 
				       
				
				}
			});
Criado 11 de maio de 2013
Ultima resposta 17 de mai. de 2013
Respostas 6
Participantes 4