2016-03-07 4 views
0

Je fais une classe (appelée Play), qui s'étend JFrame, et implémente ActionListener et KeyListener. Cette classe ne contient pas la méthode main(), car il existe une classe différente pour cela.ActionListener et KeyListener Erreur

Je reçois une erreur qui stipule, « classe Play doit soit être déclarée abstraite, ou mettre en œuvre la méthode abstraite keyReleased(KeyEvent) dans KeyListener ».

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.geom.Ellipse2D; 

public class Play extends JFrame implements ActionListener, KeyListener { 
    Timer timer = new Timer(5, this); 
    double x = 0, y = 0, velx = 0, vely = 0; 

    public Play() { 
     timer.start(); 
     addKeyListener(this); 
     setFocusable(true); 
     setFocusTraversalKeysEnabled(false); 
    } 

    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.fill(new Ellipse2D.Double(x, y, 40, 40)); 
    } 

    public void actionPreformed(ActionEvent e) { 
     repaint(); 
     x += velx; 
     y += vely; 
    } 

    public void up() { 
     vely = -1.5; 
     velx = 0; 
    } 

    public void down() { 
     vely = 1.5; 
     velx = 0; 
    } 

    public void left() { 
     vely = 0; 
     velx = -1.5; 
    } 

    public void right() { 
     vely = 0; 
     velx = 1.5; 
    } 

    public void keyPressed(KeyEvent e) { 
     int code = e.getKeyCode(); 

     if (code == KeyEvent.VK_UP) { 
      up(); 
     } 

     if (code == KeyEvent.VK_DOWN) { 
      down(); 
     } 

     if (code == KeyEvent.VK_LEFT) { 
      left(); 
     } 

     if (code == KeyEvent.VK_RIGHT) { 
      right(); 
     } 
    } 

public void keyReleased(KeyEvent e) { 
} 

    public void keyTyped(KeyEvent e) { 
    } 
} 
+0

Commencez par avoir un regard sur [Qu'est-ce qu'une interface?] (Https : //docs.oracle.com/javase/tutorial/java/concepts/interface.html), [Interfaces] (https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html), [ Comment écrire un auditeur d'action] (http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) et [Comment écrire un écouteur de clé] (https://docs.oracle.com/ javase/tutoriel/uiswing/événements/clé listener.html) et – MadProgrammer

+0

Et avant que vous posiez votre prochaine question sur mon 'KeyListener' cesse mystérieusement de fonctionner, regardez [Comment utiliser les raccourcis clavier] (http://docs.oracle.com/javase/tutorial/uiswing /misc/keybinding.html) – MadProgrammer

Répondre

0

Eh bien, faites ce qu'il dit. Puisque vous héritez de l'interface KeyListener, vous devez implémenter toutes les méthodes de l'interface, y compris 'keyReleased'

+0

J'ai essayé cela, mais j'ai toujours la même erreur. J'ai mis à jour le code dans la question – user3704212

0

KeyListener doit avoir toutes ses méthodes implémentées.

ajouter simplement cette méthode à la classe et il devrait fonctionner

@Override 
public void keyReleased(KeyEvent e) { 

} 

Vous devez également Override toutes les KeyListener méthodes mises en œuvre

+0

J'ai essayé cela, mais j'ai toujours la même erreur. J'ai mis à jour le code dans la question – user3704212

+0

@ user3704212 essayez d'ajouter l'annotation '@ Override' avant chacune des méthodes implémentées – Jonah

+0

J'ai essayé d'ajouter l'annotation Override avant chacune des méthodes implémentées, et cela crée juste une erreur sur chaque ligne qui a Passer outre. – user3704212