2012-11-27 6 views
0

Lorsque je lance mon applet, je n'obtiens aucune réponse de la part de l'écouteur de touche. Comment puis-je réparer ça? Voici le code.Applet - KeyListener ne fonctionne pas

import java.applet.Applet; 
import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.util.Timer; 
import java.util.TimerTask; 

public class Main extends Applet { 
private static final long serialVersionUID = 1L; 
public String mode = ""; 
public Graphic gr; 

public void init() { 
    this.setSize(400, 400); 
    gr = new Graphic(); 
    this.add(gr); 
    gr.addKeyListener(new MyKeyListener()); 
    TimerTask timerTask = new TimerTask() { 

     @Override 
     public void run() { 
        gr.requestFocus(); 
      gr.repaint(); 
     } 

    }; 
    new Timer().scheduleAtFixedRate(timerTask, 0, 1000/5); 

} 

public void paint(Graphics g) { 

} 

private class MyKeyListener extends KeyAdapter { 
    public MyKeyListener(){ 
     System.out.println("HELLO"); 
    } 
    public void keyPressed(KeyEvent e) { 

     switch (e.getKeyCode()) { 
     case KeyEvent.VK_UP: 
      gr.direction = Graphic.Direction.up; 
      gr.move(); 

      break; 
     case KeyEvent.VK_DOWN: 
      gr.direction = Graphic.Direction.down; 
      gr.move(); 
      break; 
     case KeyEvent.VK_LEFT: 
      gr.direction = Graphic.Direction.left; 
      gr.move(); 
      break; 
     case KeyEvent.VK_RIGHT: 
      gr.direction = Graphic.Direction.right; 
      gr.move(); 
      break; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 

    } 
} 
} 
+1

* « Je ne reçois aucune réponse de l'auditeur clé. » * Code donné comme 'peinture public void (Graphics g) { }' I Je suis surpris que vous obtenez quelque chose. 1) Pourquoi AWT au 3ème millénaire? 2) Pourquoi applet plutôt que cadre? 3) Pourquoi 'KeyListener' à la place des raccourcis clavier? 4) Pourquoi aucun appel à une méthode mentionnant 'focus'? Voir le tutoriel [focus] (http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html) pour plus de détails. - Il semble que vous essayez de «coder par magie» lorsque cela ne fonctionne généralement pas. –

+1

'this.setSize (400, 400);' Et ne fais pas ça. Une taille d'applet est définie par des attributs en HTML. –

+0

Essayer d'attirer l'attention en utilisant une minuterie comme celle-ci est une idée horrible à tout moment, ne jamais le faire (je sais "juste un test" - mais la déclaration est maintenue). Évitez les écouteurs clés et favorisez [les raccourcis clavier] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) ils ne souffrent pas autant des mêmes problèmes de focus que ceux de 'KeyListener's – MadProgrammer

Répondre

2
import java.applet.Applet; 
import java.awt.Graphics; 
import java.awt.Shape; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class TTest extends Applet{ 
    @Override 
    public void init() { 
     // TODO Auto-generated method stub 
     super.init(); 
     this.setSize(400, 400); 
     addKeyListener(new KeyListener()); 

    } 
    class KeyListener extends KeyAdapter{ 
     public KeyListener(){ 

     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      // TODO Auto-generated method stub 
      super.keyPressed(e); 
      switch(e.getKeyCode()){ 
      case KeyEvent.VK_UP: 
       System.out.println("Pressed up arrow!"); 
       break; 
      case KeyEvent.VK_DOWN: 
       System.out.println("Pressed down arrow!"); 
       break; 
      default: 
       System.out.println("You pressed: " + e.getKeyCode()); 
      } 
     } 

    } 
} 

Vous devez ajouter écouteur d'événement clé pour lui-même applet pas objet graphique. Cependant, je pense qu'il est correct d'ajouter écouteur d'événement de souris à des objets en dehors de l'applet

+0

1- Je pense que Graphic est là pour sa propre classe. 2- En ce qui concerne l'absence totale de contexte, j'éviterais de suggérer l'utilisation de 'KeyListener', il y a une meilleure API pour ce genre de chose - IMHO – MadProgrammer

+0

Je pense que le problème a été causé par le code ci-dessus parce que quand vous déployer votre programme, le programme est axé sur l'objet applet pas sur l'objet graphique. Les entrées ne sont donc pas reconnues par le programme d'écoute du clavier. – Jason