Capturar tecla Pressionada no JFrame

5 respostas
R

Existe alguma maneira de eu sempre saber qual tecla está sendo pressionada em uma determinada tela…

Mas eu quero que sempre a tecla seja capturada pelo JFrame mesmo que o foco esteja em algum JTextField dessa tela…

O que eu preciso é fazer com que quando o usuário pressionar ESC a tela se feche mas eu preciso que mesmo se o usuario estiver editando algum JTextField e pressionar ESC a tela seja fechada…

Se eu coloco um KeyEvent no JFrame só funciona se o foco estiver na tela e não captura a tecla se o foco estiver em algum text.

Valeu

5 Respostas

R

Como vc está usando?

Tenta isso:

public void keyReleased(KeyEvent ke)
{
	if ( ke.getKeyCode() == KeyEvent.VK_ESCAPE )
		System.exit(0);
}

OU

public void keyReleased(KeyEvent ke)
{
	if ( ke.getKeyCode() == 27 )
		System.exit(0);
}

OK.
Abraços:)

R

Frisando.
Vc precisa colocar o JFrame e o JTextfield para que estejam preparados para executar a função caso a tecla seja pressionada.
Ex:

this.addKeyListener(this);
jtextfield.addKeyListener(this);

Assim independente de onde vc esteja ele sairá da tela.
Ok.

Espero que tenha ajudado.
Abraços. :thumbup:

R

Ajudou sim mas ainda tem um problema o que eu não queria é ter que sair adicionando um KeyListener para cada componente que eu tiver na tela, mas acho que num vai ter jeito né.

R

Se não me engano, vc pode usar um “Handler”, já usei isso uma vez, mais prefiro o uso dos Listeners do Mouse, Teclado…

Aí vai um exemplo:

JTextField tf = new JTextField(15);
TextFieldHandler tfHandler = new TextFieldHandler();
tf.addActionListener(tfHandler);

private class TextFieldHandler implements ActionListener
{
        public void actionPerformed(ActionEvent ev)
        {
                //Faz a ação que desejar
        }
}

Valeu…
Abraço

B

Ou vc pode fazer assim:

getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("DELETE"), "deletar");
           getActionMap().put("deletar", new AbstractAction(){
	   public void actionPerformed(ActionEvent e){
		// remove alinha
	   }
           });
Criado 17 de junho de 2005
Ultima resposta 20 de jun. de 2005
Respostas 5
Participantes 3