[Respondido] manter tecla pressionada gera varias chamadas a keyPressed/Released

quando eu mantenho uma tecla pressionada…por exempla a tecla VK_LEFT;
o listener “pensa” que eu estou apertando e soltando a tecla repetidas vezes…
o resumo do codigo

public void keyPressed(KeyEvent e)
{
    switch (e.getKeyCode()) {
        case KeyEvent.VK_LEFT:
            System.out.println("Tecla pŕessionada!");
	break;
}}

public void keyReleased(KeyEvent e) 
{
    switch (e.getKeyCode()) {
        case KeyEvent.VK_LEFT:
            System.out.println("Tecla solta!");
	break;
}}

gera a saida:

Tecla pŕessionada!
Tecla solta!
Tecla pŕessionada!
Tecla solta!
Tecla pŕessionada!
Tecla solta!
Tecla pŕessionada!
Tecla solta!

o problema é que eu quero chamar um metodo pelo press e released, mas só quando a tecla for realmente pressionada e solta, mas nao quando se mantiver pressionada… esta confusão do listener esta me deixando confuso…

Oi,

testei seu código aqui e funciona perfeitamente…

segue.:

[code]addKeyListener
(
new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (
e.getKeyCode() == KeyEvent.VK_LEFT
)
{
System.out.println(“Pressed”);
}
}

	public void keyReleased(KeyEvent e)   
	{   
		if	(
				e.getKeyCode()		==	KeyEvent.VK_LEFT
			)
		{
			System.out.println("Released");   
		}
	}
}

);[/code]
Resultado.:

Pressed Pressed Pressed Pressed Pressed Pressed Released Pressed Pressed Pressed Pressed Pressed Released Pressed Pressed Pressed Pressed Pressed Pressed Pressed Pressed Released
Tchauzin!

[quote=lina]Oi,

testei seu código aqui e funciona perfeitamente…

segue.:

[code]addKeyListener
(
new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (
e.getKeyCode() == KeyEvent.VK_LEFT
)
{
System.out.println(“Pressed”);
}
}

	public void keyReleased(KeyEvent e)   
	{   
		if	(
				e.getKeyCode()		==	KeyEvent.VK_LEFT
			)
		{
			System.out.println("Released");   
		}
	}
}

);[/code]
Resultado.:

Pressed Pressed Pressed Pressed Pressed Pressed Released Pressed Pressed Pressed Pressed Pressed Released Pressed Pressed Pressed Pressed Pressed Pressed Pressed Pressed Released
Tchauzin![/quote]
NO caso da Lina, você pode “amarrar” a chamada do evento por uma variável booleana também… Assim ele só chama a instrução que corresponde a impressão de “Pressed” uma vez até você soltar e apertar o botão de novo.

OBS: Mas isso é meio feio…

Manter uma tecla pressionada ativa a auto-repetição. Para comprovar isso, mantenha uma tecla qualquer (como a letra A) e a mantenha pressionada. Não é porque a tecla é o Shift ou o Control que ela não tem auto-repetição.

da pra desativar esta auto-repetição sem usar boolean ?

A auto-repetição das teclas é uma características do subsistema de entrada de dados do seu sistema operacional (Windows, Linux) ou ambiente operacional (Gnome, KDE), ou seja, é algo que idealmente não deveria ser gerenciado pela sua aplicação. Assim, em vez de desativar a auto-repetição, o ideal é detectar e processar essa situação de alguma maneira dentro da sua aplicação, sendo uma saída possível a variável boolean sugerida anteriormente.

Bom…ja que nao tem jeito…vou tentar com boolean mesmo,…
è que com boolean estava parecendo meio gambiarra,mas já que é assim ^^.

Obrigado a todos pelo esclarecimento !