2 Teclas pressionadas ao mesmo tempo

Dae galera,
Como faço para eu pegar duas teclas precionadas ao mesmo tempo???
Por exemplo, pra cima e pra direita juntos (diagonal)…
Quando faço isso o KeyEvent não faz as duas, ele faz uma e trava a outra… sendo que ela está apertada … ai tenho q soltar e apertar de novo!!
Sacaram ou expliquei mal?

Valeu!!

Até +!

na verdade ele faz as duas sim, soh q se vc ficar segurando ele n vai ficar repetindo o keyPressed pras duas, apenas pra uma… vc pode resolver isso criando uma thread e usando booleans para controlar as direcoes…

hehehehhe!!
nao faz nem duas semanas q eu tava com essa mesma dúvida!
e graças ao PJ, o problema foi solucionado com facilidade!
o segredo é usar threads… da um look nesse tópico onde solucionei minha dúvida.

http://www.portaljava.com.br/home/modules.php?name=Forums&file=viewtopic&t=7974&sid=f47927b3a6c5038a75d9db1fb3160446

qdo eu usei esse código, eu modifiquei bastante… mas com esse tópico com certeza vc vai ter “a ideia” de como resolver!

flw! abraços

[quote=“DanielBadawi”]hehehehhe!!
nao faz nem duas semanas q eu tava com essa mesma dúvida!
e graças ao PJ, o problema foi solucionado com facilidade!
o segredo é usar threads… da um look nesse tópico onde solucionei minha dúvida.

http://www.portaljava.com.br/home/modules.php?name=Forums&file=viewtopic&t=7974&sid=f47927b3a6c5038a75d9db1fb3160446

qdo eu usei esse código, eu modifiquei bastante… mas com esse tópico com certeza vc vai ter “a ideia” de como resolver!

flw! abraços[/quote]

nos respondemos o post no mesmo minuto eheheheh PJ rox!

tenho uma classe boa para mexer com teclado
o unico problema é que ela detecta no maximo 5 teclas por linha do teclado…

import java.awt.event.*;

/**
*Classe que implementa a interface KeyListener
*<br>O objetivo dela e ler, em qualquer momento, uma tecla que o usuário digitar<br>
*e guardar o código ANSI dela em uma váriavel
*/
public class Teclado implements KeyListener
{
	/**
	Constante que indica o códico ANSI da tecla <B>"seta para cima"</B>
	*/
	public static final int CIMA  = 38;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para baixo"</B>
	*/
    public static final int BAIXO = 40;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para direita"</B>
	*/
	public static final int DIREITA =39;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para esquerda"</B>
	*/
	public static final int ESQUERDA =37;

	/**
	Constante que indica o códico ANSI da tecla <B>"Enter"</B>
	*/
	public static final int ENTER =10;

	/**
	Constante que indica o códico ANSI da tecla <b>"Esc"</b>
	*/
	public static int ESC=27;

	/**
	Constante que indica o códico ANSI da tecla <B>"F1"</B>
	*/
	public static final int F1=112;

	/**
	Constante que indica o códico ANSI da tecla <B>"w"</B>
	*/
	public static final int W = 87;

	/**
	Constante que indica o códico ANSI da tecla <B>"s"</B>
	*/
	public static final int S = 83;

	//Vetor que guarda quais teclas estãoapertadas
	private static boolean[] TeclasPressionadas = new boolean[256];

	/**
	*Função que é disparada quando o usuário digita qualquer
	*<br> tecla, mesmo que fora de uma leitura.
	*<br> Ela guarda a tecla que o usuário digitou.
	*/

	public static void inicializaVetorTeclas()
	{
		for (int i = 0; i<256; i++)
		{
			TeclasPressionadas[i] = false;
		}
	}

	public void keyPressed(KeyEvent e)
	{
		if (e.getKeyCode() < 256)
		{
			TeclasPressionadas[ e.getKeyCode() ] = true;
		}
	}

	/**
	* Função que é disparada quando o usuário solta uma tecla que ele apertou
	* <br>Ela atualiza o valor da variável funcionou
	*/
	public void keyReleased(KeyEvent e)
	{
		if (e.getKeyCode() < 256)
		{
			TeclasPressionadas[ e.getKeyCode() ] = false;
		}


	}

	/**
	* Função que é dispara enquanto o usuário está com uma tecla pressionada
	*/
	public void keyTyped(KeyEvent e)
	{
	}

	/**
	* Função usada para fazer a interface com o programador que<br>
	* usar esta classe.
	* @return <code>CodTecla</code> - o valor ANSI da última tecla digitada pelo usuário
	*/
	public static boolean EstaPressionada(int Tecla)
	{
		return TeclasPressionadas[Tecla];
	}
}

espero que gostem…

[quote=“microfilo”]tenho uma classe boa para mexer com teclado
o unico problema é que ela detecta no maximo 5 teclas por linha do teclado…

import java.awt.event.*;

/**
*Classe que implementa a interface KeyListener
*<br>O objetivo dela e ler, em qualquer momento, uma tecla que o usuário digitar<br>
*e guardar o código ANSI dela em uma váriavel
*/
public class Teclado implements KeyListener
{
	/**
	Constante que indica o códico ANSI da tecla <B>"seta para cima"</B>
	*/
	public static final int CIMA  = 38;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para baixo"</B>
	*/
    public static final int BAIXO = 40;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para direita"</B>
	*/
	public static final int DIREITA =39;

	/**
	Constante que indica o códico ANSI da tecla <B>"seta para esquerda"</B>
	*/
	public static final int ESQUERDA =37;

	/**
	Constante que indica o códico ANSI da tecla <B>"Enter"</B>
	*/
	public static final int ENTER =10;

	/**
	Constante que indica o códico ANSI da tecla <b>"Esc"</b>
	*/
	public static int ESC=27;

	/**
	Constante que indica o códico ANSI da tecla <B>"F1"</B>
	*/
	public static final int F1=112;

	/**
	Constante que indica o códico ANSI da tecla <B>"w"</B>
	*/
	public static final int W = 87;

	/**
	Constante que indica o códico ANSI da tecla <B>"s"</B>
	*/
	public static final int S = 83;

	//Vetor que guarda quais teclas estãoapertadas
	private static boolean[] TeclasPressionadas = new boolean[256];

	/**
	*Função que é disparada quando o usuário digita qualquer
	*<br> tecla, mesmo que fora de uma leitura.
	*<br> Ela guarda a tecla que o usuário digitou.
	*/

	public static void inicializaVetorTeclas()
	{
		for (int i = 0; i<256; i++)
		{
			TeclasPressionadas[i] = false;
		}
	}

	public void keyPressed(KeyEvent e)
	{
		if (e.getKeyCode() < 256)
		{
			TeclasPressionadas[ e.getKeyCode() ] = true;
		}
	}

	/**
	* Função que é disparada quando o usuário solta uma tecla que ele apertou
	* <br>Ela atualiza o valor da variável funcionou
	*/
	public void keyReleased(KeyEvent e)
	{
		if (e.getKeyCode() < 256)
		{
			TeclasPressionadas[ e.getKeyCode() ] = false;
		}


	}

	/**
	* Função que é dispara enquanto o usuário está com uma tecla pressionada
	*/
	public void keyTyped(KeyEvent e)
	{
	}

	/**
	* Função usada para fazer a interface com o programador que<br>
	* usar esta classe.
	* @return <code>CodTecla</code> - o valor ANSI da última tecla digitada pelo usuário
	*/
	public static boolean EstaPressionada(int Tecla)
	{
		return TeclasPressionadas[Tecla];
	}
}

espero que gostem…[/quote]

vc n precisa gravar em constantes as teclas cima, baixo, etc… eles jah estao gravadas em constantes staticas na classe KeyEvent se n me engano…

Opa…
Valeu galera…
Pois é… ja tinha feito isso no celular!! Achei q o J2SE tinha alguma solução mais nativa, heheheh…
Mas valeu pela colaboration aí!!!
Eu até pesquisei no fórum antes… mas cada palavra chave q eu colocava me retornava o forum inteiro… ehuaheuhaueae…
Aí resorvi postar!!!
Descurpem!!!

Até +!

[quote=“Felipe”]
vc n precisa gravar em constantes as teclas cima, baixo, etc… eles jah estao gravadas em constantes staticas na classe KeyEvent se n me engano…[/quote]

de fato
mas eu não manjava muito bem evento qndo eu fiz essa classe
então eu e meus colegas testamos tecla por tecla… aff…