Evento teclado JTable

Oi pessoal… eu tentei aqui mas não tá funcionando, se alguém puder dar uma ajuda…

Eu fiz assim:

tFormulas.addKeyListener(new KeyAdapter(){
    public void keyReleased(KeyEvent e) {  
        if ((e.getKeyCode() ==  KeyEvent.VK_UP)  || (e.getKeyCode() ==  KeyEvent.VK_DOWN)) { 
	    System.out.println("setas");
        }
    }
});

Mas quando eu pressiono as setas pra cima e pra baixo não acontece nada.

obrigada.

Olá Bruna…

Então… estranho não imprimir “setas”… parece que está tudo ok… fiquei na dúvida e testei aqui na minha aplicação e funcionou… estranho! =S

Você só precisa dos eventos das setas pra cima e pra baixo?

[]'s

Tente implementar o método keyPressed ao invés de keyReleased.

Blz? Flw! :thumbup:

O ListSelectionListener é mais aplicado pra detectar mudanças de linha na JTable ( imagino ser esse o motivo pra vc estar capturando essas setas )

http://www.guj.com.br/posts/list/53287.java#280611

Desse jeito vc exclui a necessidade de ter que ficar capturando setas, e ainda fazer eventos pra capturar cliques de mouse.
Tudo concentrado num Listener só.

Pessoal, obrigada por me responderem!

eu tentei assim tb:

tFormulas.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent ke) {  
        if ((ke.getKeyCode() ==  KeyEvent.VK_UP)  || (ke.getKeyCode() ==  KeyEvent.VK_DOWN)) { 
	    System.out.println("setas");
        }
    }
});

Mas não tá funcionando tb. Preciso atualizar outra tabela conforme a linha selecionada nesta. Ela pode ser selecionada pelo mouse e pelo teclado. Pelo mouse tá funcionando certinho… Não sei o q pode ser o erro com o evento de teclado.

Obrigada!

Olá,

Eu tenho uma implementação aqui que funciona legal.
Também utilizo keyPressed. Vê se te ajuda.

tItemPedido.addKeyListener(new KeyAdapter() {
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			tItemPedido.adicionaLinha(new String[] { "", "", "", "", "" });
		} else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_E) {
			int linha = tItemPedido.getLinhaSelecionada(); 
			if (linha > -1) {
				((PedidoControle) getControle()).excluirItem(PedidoForm.this);
			}
		} else if (e.isControlDown()
				&& e.getKeyCode() == KeyEvent.VK_Z) {
			zoom();
		}
	}
});

Coloquei:

tFormulas.getSelectionModel().addListSelectionListener(new ListSelectionListener() {  
    public void valueChanged(ListSelectionEvent e) {  
        System.out.println(tFormulas.getSelectedRow() + " " + tFormulas.getSelectedColumn());
    }  
});

e ele não imprime nada ainda…

Realmente muito estranho isso estar acontecendo… aqui eu testei e funcionou…

Você está chamando no lugar certo? na jTable que está instanciando mesmo? sei lá, as vezes é uma bobeirinha dessas… se puder coloque todo da instanciação jtable código aqui…

[]'s

veja:

                tFormulas = new JTable();
		mFormula = new FormulaTableModel();
		tFormulas.setModel(mFormula);
		tFormulas.getColumn("Código").setPreferredWidth(70);
		tFormulas.getColumn("Descrição").setPreferredWidth(630);
		tFormulas.addMouseListener(this);
		
		tFormulas.addKeyListener(new KeyAdapter(){
			public void keyReleased(KeyEvent e) {  
			    if ((e.getKeyCode() ==  KeyEvent.VK_UP)  || (e.getKeyCode() ==  KeyEvent.VK_DOWN)) { 
					System.out.println("setas");
				}
			}
		});

Isso, posta o código da criação da tabela

Pessoal, tava certo, adicionei os comandos pra ele atualizar a outra tabela e ela é atualizada qdo eu pressiono as setas.

Obrigada mesmo pela atenção.