2016-12-23 4 views
-1

Je suis complètement nouveau à la programmation Java. Je ne peux pas obtenir mes keyEvent pour ne pas travailler. J'en ai besoin pour un petit jeu que je fais. Voici mon code:Comment faire fonctionner KeyEvent en Java?

package markusrytter.pingpong; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class main extends JPanel implements KeyListener { 

    static int ballX; 
    static int ballY; 
    static int ballR = 15; 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.fillOval(ballX - ballR, ballY - ballR, ballR * 2, ballR * 2); 
    } 
    public static void main(String[] args) throws InterruptedException { 
     JFrame frame = new JFrame("Sample Frame"); 
     main game = new main(); 
     frame.add(game); 
     frame.setSize(1400, 800); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 

     ballX = frame.getContentPane().getSize().width/2; 
     ballY = frame.getContentPane().getSize().height/2; 

     while (true) { 
      game.repaint(); 
      Thread.sleep(10); 
     } 
    } 

    public void keyPressed(KeyEvent e) { 
     System.out.println("A key is Pressed: " + e.getKeyCode()); 
     if(e.getKeyCode() == KeyEvent.VK_SPACE){ 
      System.out.println("Spacebutton pressed"); 
     } 
    } 
} 

J'espère que quelqu'un peut aider, je l'ai essayé de regarder des vidéos, mais encore une fois, je suis nouveau à java.

+1

(1-) Je ne sais pas pourquoi cela a eu autant de votes. Le PO déclare qu'ils ont lu des articles et copié le code directement. Ne pensez-vous pas que le code devrait fonctionner s'il a été copié directement? – camickr

Répondre

0

Plus important encore: changez le nom de votre classe. C'est ce qu'on appelle le principal et c'est une mauvaise idée. Il est également préférable de remplacer paintComponent() au lieu de paint. Vous n'avez pas ajouté le keylistener au JFrame. Vous devez appeler dans votre principale après la créationgame:

frame.addKeyListener(game); 

Vous devez également ajouter les méthodes KeyListener restantes.

et cela devrait le faire.

+0

Puis il dit: ne peut pas utiliser cela dans une référence statique –

+0

@markusrytter remarquez mon édition. (changé 'this' en' jeu') – ItamarG3

+0

Merci beaucoup, maintenant ça marche –

4
  1. Votre code ne compilera pas puisque vous n'avez pas mis en œuvre KeyListener (complètement)

  2. Vous n'avez pas ajouté l'auditeur clé dans le panneau dans son constructeur. KeyEvents sont uniquement distribués aux composants avec focus. Votre panneau n'est pas focalisable et ne recevra jamais d'événements. Vous utilisez la méthode setFocusable(true).

  3. Ne pas ignorer la peinture(). Au lieu de cela, vous devez surcharger paintComponent(...).

  4. Vous ne devriez même pas utiliser KeyListener. Au lieu de cela, lorsque vous utilisez Swing, vous devez utiliser Key Bindings. N'utilisez pas de variables statiques pour les propriétés de votre classe.

  5. Votre interface graphique n'est pas créée sur le Event Dispatch Thread (EDT).

j'ai lu des articles, j'ai regardé les vidéos, et tout fait exactement comme eux,

De toute évidence pas ou travailleraient.

Pour un début de tutoriel approprié avec le Swing Tutorial. Il y a des sections sur:

  1. Comment écrire un KeyListener
  2. Peinture personnalisée
  3. Key Bindings.
  4. Concurrence