2010-01-16 7 views
0

Désolé, pour un double affichage, déjà posté cette question une fois, mais j'ai réalisé que je n'étais pas assez explicite. Je n'ai toujours pas réussi à trouver une réponse à ma question, donc je vais essayer de mieux décrire mon problème ici:Déplacement de JLabel avec les touches fléchées

Je les classes suivantes:

public class Paddle extends JLabel {} 
public class Canvas extends JPanel implements Runnable {} 

Maintenant, quand je commence le fil décrit dans Canvas, je veux une boucle infinie (boucle en sortie du programme). Dans cette boucle, j'ai une variable DIRECTION. Quand la touche fléchée gauche est enfoncée, je voudrais que cela soit défini -1. Si on appuie sur la touche flèche droite, j'aimerais que +1 soit sa valeur. Si aucun des cas ci-dessus n'est vrai, sa valeur devrait être 0 par défaut.

J'espère que j'étais plus explicite cette fois. Si non, dites-le s'il vous plaît.

+0

Quelle est votre question exactement. – Bozho

Répondre

0

Eh bien, pour obtenir les séquences de touches que vous devez avoir une classe qui implémente KeyListener

Comme ceci:

public class MyKeyListener implements KeyListener, MouseListener{ 
    int direction = 0; 

    public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_LEFT) direction = -1; 
     else if(e.getKeyCode() == KeyEvent.VK_RIGHT) direction = 1; 
    } 

    public void keyReleased(KeyEvent e) { 
     direction = 0; 
    } 
} 

Puis dans votre code d'initialisation (par exemple, dans le constructeur de votre JPanel classe dérivée) vous définissez l'auditeur clé d'une instance de votre classe MyKeyListener

MyKeyListener mk = new MyKeyListener(); 
    this.addKeyListener(mk); 

Dans votre boucle, vous regardez juste la direction feild de mk;

+0

Que comprenez-vous exactement par code principal? Principale? le JFrame? le JPanel. rien ne semble fonctionner. Dois-je mettre l'accent sur quelque chose? –

+0

Probablement dans le constructeur de votre classe Canvas. Vous ne devriez pas avoir besoin de régler la mise au point manuellement. Essayez de cliquer sur la toile. Vous pouvez ajouter des instructions System.out.println (direction) dans la fonction keyPressed pour vous assurer qu'elles sont réellement appelées. –

Questions connexes