begin process at 2010 02 09 20:53:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Java2D

 > 

KeyListener qui ne marche pas


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

KeyListener qui ne marche pas

mercredi 29 novembre 2006 à 08:43:40 | KeyListener qui ne marche pas

Palleas_44

Bonjour ;)

Je débute en java et souhaiterai écrire mon tout premier jeu, le probleme c'eest pour deplacer mon personnage, ca ne marche pas !
Voici mon code :
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;


public class MaZone extends JPanel implements KeyListener,MouseListener,Runnable {
    private Personnage1 perso1 = new Personnage1(10,10,"datas/images/harry.gif");
   
    public MaZone() {
        setBackground(Color.BLACK);
        addKeyListener(this);
        addMouseListener(this);
    }
   
    public void run() {
        // rien !
    }

    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        this.perso1.setCoord(e.getX(), e.getY());
        repaint();
    }

    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        if(e.getKeyCode() == KeyEvent.VK_LEFT)
            this.perso1.moveLeft();
        else if(e.getKeyCode() == KeyEvent.VK_RIGHT)
            this.perso1.moveRight();
        else if(e.getKeyCode() == KeyEvent.VK_UP)
            this.perso1.moveTop();
        else if(e.getKeyCode() == KeyEvent.VK_DOWN)
            this.perso1.moveBottom();
       
        repaint();
       
    }

    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub
       
    }
   
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.perso1.paint(g)
;    }
}

La classe personnage est une classe toute simple qui dessine le personnage et possede les methodes pour le déplacer :
public class Personnage1 extends BasePerso{
   
    public Personnage1(int x,int y,String imageFilename) {
        super(x,y,imageFilename);
    }
}

et basePerso :
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JLabel;


public class BasePerso extends JLabel{
    private int x;                // abscisse du personnage
    private int y;                // ordonnée du personnage
    private Image image;    // personnage (image)
    private final int VITESSE = 10;
   
    public BasePerso(int x,int y,String imageFilename) {
        this.x = x;
        this.y = y;
        ImageIcon img = new ImageIcon(imageFilename);
        this.image = img.getImage();
    }
   
    public void moveLeft() {
        this.x -= this.VITESSE;
    }
   
    public void moveRight() {
        this.x += this.VITESSE;
    }
   
    public void moveTop() {
        this.y -= this.VITESSE;
    }
   
    public void moveBottom() {
        this.x += this.VITESSE;
    }
   
    public void setCoord(int x,int y) {
        this.x = x;
        this.y = y;
    }
   
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(this.image, this.x, this.y, null);
    }
}


J'ai mis un mouseListener en attendant, histoire de me faire à la méthode repaint() et tout le tutim mais je ne comprend pas pourquoi le keyListener n'est pas interprété T_T
Sauriez vous me dire pourquoi ?

Merchi !
mercredi 29 novembre 2006 à 10:21:00 | Re : KeyListener qui ne marche pas

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

tu mélanges composants et dessin ce qui n'est pas super propre et peut causer des bugs :P tu devrais plus faire un truc du gout:

(petite note en swing oublie la méthode 'paint' la seul valable et que ne provoque pas de gros bug d'affichage reste paintComponent)

concernant les KeyListener sur un panel attention les composants d'un panel l'aspire donc le rend inactif.....


voici un code reprenant ton code avec des petites modif :P   :

//revue de la classe BasePerso tu en fais trop pour si peut sachant que JLabel à tout ce qu'il faut :)
import javax.swing.ImageIcon;
import javax.swing.JLabel;


public class BasePerso extends JLabel{

    private static final long    serialVersionUID    = 4273701155940390462L;
    private final static int    VITESSE                = 10;
  
    public BasePerso(int x,int y,String imageFilename) {
        ImageIcon icon = new ImageIcon(imageFilename);
        setIcon(icon);
        setBounds(x, y, icon.getIconWidth(), icon.getIconHeight());
    }
  
    public void moveLeft() {
        setLocation(getLocation().x-VITESSE, getLocation().y);
    }
  
    public void moveRight() {
        setLocation(getLocation().x+VITESSE, getLocation().y);
    }
  
    public void moveTop() {
        setLocation(getLocation().x, getLocation().y-VITESSE);
    }
  
    public void moveBottom() {
        setLocation(getLocation().x, getLocation().y+VITESSE);
    }
  
    public void setCoord(int x,int y) {
        setLocation(x, y);
    }
}


//pas de modif ici sauf le serialVersionUID   (je suis sous eclipse et j'aime pas les warning :P)
public class Personnage1 extends BasePerso{
    private static final long    serialVersionUID    = 3384124276754720424L;

    public Personnage1(int x,int y,String imageFilename) {
        super(x,y,imageFilename);
    }
}


//la classe MaZone avec quelques modifications
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class MaZone extends JPanel implements MouseListener,Runnable {

    private static final long    serialVersionUID    = 7747085441232200622L;
    private Personnage1            perso1                = new Personnage1(10, 10,
                                                            "datas/images/harry.gif");
  
    public MaZone() {
        setBackground(Color.BLACK);
        addMouseListener(this);
        registerKeyboardAction();
        setLayout(null);
        add(perso1);
    }
   
    private void registerKeyboardAction(){
        registerKeyboardAction(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                perso1.moveLeft();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
       
        registerKeyboardAction(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                perso1.moveRight();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
       
        registerKeyboardAction(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                perso1.moveTop();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
       
        registerKeyboardAction(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                perso1.moveBottom();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
    }
  
    public void run() {
        // rien !
    }

    public void mouseClicked(MouseEvent e) { }

    public void mouseEntered(MouseEvent e) { }

    public void mouseExited(MouseEvent e) { }

    public void mousePressed(MouseEvent e) { }

    public void mouseReleased(MouseEvent e) {
        this.perso1.setCoord(e.getX(), e.getY());
    }

}


//la classe de test
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(800, 600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setContentPane(new MaZone());
        f.setVisible(true);
       
    }
}



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA


Cette discussion est classée dans : java, public, int, void, import


Répondre à ce message

Sujets en rapport avec ce message

probleme avec un applet chat [ par funbidule ] J'ai un probleme avec ce programme il crès bien la fenetre mais n essaie pas de se connecter au serveurQuelqu'un saurait il m aider?package chat;impor newbie question dessiner java [ par anisotrope ] Bonjour a tous.Tout d'abord avant d'exposer mon probleme je voudrais dire que je viens juste de commencer le java donc un peu d'indulgence :=).Voila j Creation d'un composant [ par lagaman ] bonjour,Dans l'optique de réutiliser du codes je voudrai créer un composant.Mon but et de créer un composant qui envoie un event : actionevent.Ci dess Pb de lancement Applet [ par Lamesh ] Bonjour Je suis en train de realiser une applet qui affiche le flux video d'un camera IPL'applet fonctionne parfaitement sous Eclipse 3.1  mais j'ai u Pb de lancement d'un applet [ par Lamesh ] Bonjour Je suis en train de realiser une applet qui affiche le flux video d'un camera IPL'applet fonctionne parfaitement sous Eclipse 3.1  mais j'ai u affectation variable dans un tableau [ par developvbdebut ] bonjour tout le mondeJ'ai un problème, je n'arrive pas à affecter des variable dans une JTableVoici la class tableaupreveimport java.awt.*;import java Pb JAPPLET avec JScrollPane [ par BRUNO1985 ] Bonjour,La partie du code d'une applet que j'ai réaliser permet de pointer des zones d'une image. Le principe est simple en faite j'ai une image (Imag Le pattern MVC [ par limalima ] Bonjour à tous, j'ai essayé d'implémenter le pattern MVC en utilisant les interface Observer et Observable; l'objectif de l'application est: changemen JPopupMenu et Event non levé [ par cocomineo ] Bonjour à tous ! Voici mon problème : J'ai une JDialog qui affiche un JPopupMenu lors d' un click droit sur son panel qui recupere les coordonnées d repaint() [ par Inutqen ] Bonjour à tous. Je me sens obligé de poser ma question dans le topic "Débutant", parce que je la trouve tellement bête qu'elle ne peut être due qu'à


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales