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?
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.
[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.
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];
}
}
[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!!!
[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…