Comment intercepter les touches du clavier
maher2626
Messages postés
13
Statut
Membre
-
maher2626 Messages postés 13 Statut Membre -
maher2626 Messages postés 13 Statut Membre -
Bonjour,
Je fait programme ou je doit executer des taches en meme temps d'ou l utilisation de threads. une des tache consiste en l'interception des touches du clavier .
pouvez -vous m'indiquer comment? ou ce qui ne va pas avec mon code?
voici mon code:
public class direction extends JFrame implements KeyListener, Runnable {
private int direct = 1;
public void direction() {
addKeyListener(this);
}
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent e) {
int ver = 1;
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
ver = 3;
System.out.println("en bas");
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
ver = 4;
System.out.println("a gauche");
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
ver = 2;
System.out.println("en haut");
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
ver = 1;
System.out.println("a droite");
}
if (!((ver + direct) == 5))
direct = ver;
}
public int getdirection() {
return direct;
}
public void run() {
System.out.println(direct);
}
}
Je fait programme ou je doit executer des taches en meme temps d'ou l utilisation de threads. une des tache consiste en l'interception des touches du clavier .
pouvez -vous m'indiquer comment? ou ce qui ne va pas avec mon code?
voici mon code:
public class direction extends JFrame implements KeyListener, Runnable {
private int direct = 1;
public void direction() {
addKeyListener(this);
}
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent e) {
int ver = 1;
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
ver = 3;
System.out.println("en bas");
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
ver = 4;
System.out.println("a gauche");
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
ver = 2;
System.out.println("en haut");
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
ver = 1;
System.out.println("a droite");
}
if (!((ver + direct) == 5))
direct = ver;
}
public int getdirection() {
return direct;
}
public void run() {
System.out.println(direct);
}
}
A voir également:
- Comment intercepter les touches du clavier
- Touches rémanentes - Guide
- Télécharger clavier arabe - Télécharger - Divers Web & Internet
- Comment taper / sur clavier - Guide
- Clavier de l'ordinateur - Guide
- Comment faire le + sur clavier telephone iphone - Guide
1 réponse
Tu dois te servir de KeyPressed et non pas KeyReleased.
De plus j'émets de grosses réserves quant à l'implémentation de Runnable :
De plus j'émets de grosses réserves quant à l'implémentation de Runnable :
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Direction extends JFrame implements KeyListener
{
private static final long serialVersionUID = 1L;
private int direct = 1;
public Direction()
{
addKeyListener(this);
}
public int getdirection()
{
return direct;
}
@Override
public void keyPressed(KeyEvent e)
{
int ver = 1;
switch (e.getKeyCode())
{
case KeyEvent.VK_DOWN :
ver = 3;
System.out.println("en bas");
break;
case KeyEvent.VK_LEFT :
ver = 4;
System.out.println("a gauche");
break;
case KeyEvent.VK_UP :
ver = 2;
System.out.println("en haut");
break;
case KeyEvent.VK_RIGHT :
ver = 1;
System.out.println("a droite");
break;
default :
System.out.println(e.getKeyCode());
}
if (ver+direct!=5)
direct = ver;
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e)
{
}
public static void main(String...args)
{
new Direction().setVisible(true);
}
}
As-tu au moins testé le code que j'ai mis ? Il lance une fenêtre, et lorsqu'on appuie dessus avec les flèches haut, bas... il affiche dans la console haut, bas... C'est exactement ce que tu voulais faire dans le code que tu nous as donné, à part que toi ça ne marchait pas et moi si !
Je n'ai rien fait d'autre que corriger ton code, en effet KeyTyped dont tu te servais ne reconnais pas les flèches contrairement à KeyPressed qui lui les reconnait. Et mettre des threads alors que c'en est déjà est évidemment inutile,d'autant que ça risque de les court-circuiter !
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JApplet;
public class snakeapplet extends JApplet implements KeyListener{
private corp[] serp = new corp[2400];
private corp pomme;
private int nbpoints;
private corp queue;
private int direct = 1;
public void init(){
addKeyListener(this);
this.setSize(410, 410);
addKeyListener(this);
pomme = new corp((((int) (Math.random() * 100000)) % 39) + 1,
(((int) (Math.random() * 100000)) % 39) + 1);
serp[0] = new corp(10, 15);
nbpoints = 0;
queue = serp[0];
}
public void prochaintour() {
queue = serp[nbpoints];
for (int i = nbpoints + 1; i > 0; i--) {
serp[i] = serp[i - 1];
}
if (direct == 1)
serp[0].setx(serp[0].getx() + 1);
else if (direct == 4)
serp[0].setx(serp[0].getx() - 1);
else if (direct == 2)
serp[0].sety(serp[0].getx() + 1);
else if (direct == 3)
serp[0].sety(serp[0].getx() - 1);
mangepomme();
}
public void paint(Graphics g) {
g.clearRect(10, 10, 390, 390);
Image imge;
imge = getToolkit().getImage("pomme.gif");
g.setColor(Color.BLACK);
for (int i = 1; i < 40; i++) {
g.fillRoundRect(i * 10, 0, 10, 10, 4, 4);
g.fillRoundRect(i * 10, 400, 10, 10, 4, 4);
g.fillRoundRect(0, i * 10, 10, 10, 4, 4);
g.fillRoundRect(400, i * 10, 10, 10, 4, 4);
}
System.out.println(nbpoints);
g.drawImage(imge, pomme.getx()*10, pomme.gety()*10, 10, 10, this);
g.setColor(Color.GREEN);
g.fillOval(serp[0].getx() * 10, serp[0].gety() * 10, 10, 10);
for (int i = 1; i < nbpoints + 1; i++) {
g.fillRect(serp[i].getx() * 10, serp[i].gety() * 10, 10, 10);
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
prochaintour();
if (verification() == true){
repaint();
}
}
public void keyPressed(KeyEvent e) {
System.out.println("kk");
int ver = 1;
if (e.getKeyCode() == KeyEvent.VK_DOWN)
ver = 3;
else if (e.getKeyCode() == KeyEvent.VK_LEFT)
ver = 4;
else if (e.getKeyCode() == KeyEvent.VK_UP)
ver = 2;
else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
ver = 1;
if (!((ver + direct) == 5))
direct = ver;
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent e) {
}
public boolean verification() {
for (int i = 1; i < (nbpoints + 1); i++) {
if (serp[0].equals(serp[i]))
return false;
}
if (serp[0].getx() == 0 || serp[0].getx() == 40 || serp[0].gety() == 0
|| serp[0].gety() == 40)
return false;
return true;
}
public void mangepomme() {
if (serp[0].equals(pomme))
{
System.out.println("====================");
nbpoints++;
pomme = new corp((((int) (Math.random() * 100000)) % 38) + 1,
(((int) (Math.random() * 100000)) % 38) + 1);
serp[nbpoints] = queue;
queue = serp[nbpoints];
}
}
}