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);
}
}
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 :
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); } }-
-
-
-
La gestion des évènements est déjà géré par des threads, donc ce code fait déjà ce qu'il faut.
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 ! -
j'ai essayer d'utiliser KeyPressed comme tu me la dit mais ca ne marche pas dans mon code le voici
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];
}
}
}
-