Key Listener ( combinaison de touches ) [Résolu]

Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
- 5 nov. 2007 à 17:17 - Dernière réponse :
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Dernière intervention
16 janvier 2009
- 6 nov. 2007 à 17:33
Bonjour ,j'ai un petit soucis avec mon keyListener ( enfin tt marche mais pas une chose )

Je m'explique , je voudrais qu'1 action s'effectue si et seulement si  j'appuye sur la fleche bas et sur la touche i
( au fait le probleme est que je n'arrive pas a gerer le multi-touches )

J'ai un essai mais il ne marche pas ...

package principale;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.*;

public class FenetrePrincipale extends JFrame {
    private Plateau plateau;

    private Container container;

    public FenetrePrincipale() {
        super("Casse brique 1.0");
        setBounds(0, 0, 1024, 768);
        // gestion de la croix
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        }

        );

        this.plateau = new Plateau();
        plateau.setBounds(150, 0, 712, 768);
        plateau.setBackground(new Color(125, 150, 175));

        container = this.getContentPane();
        container.setLayout(null);

        container.add(plateau);

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

        MyMouseListener m = new MyMouseListener();
        this.addMouseListener(m);

        this.setVisible(true);

    }

    private class MyMouseListener implements MouseListener {
        public void mouseClicked(MouseEvent e) {
            JOptionPane.showMessageDialog(null, "click", "mouse",
                    JOptionPane.NO_OPTION);
        }

        public void mouseEntered(MouseEvent e) {

        }

        public void mouseExited(MouseEvent e) {

        }

        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }

    }

    private class MyKeyListener implements KeyListener {
        public void keyPressed(KeyEvent evt) {
            /*
             * JOptionPane.showMessageDialog(null, evt.getKeyChar()+" code
             * clavier = "+evt.getKeyCode(), "caractere tape",
             * JOptionPane.NO_OPTION);
             */
            if (evt.getKeyCode() == 37)
                plateau.getRaquette().setLeft(true);

            if (evt.getKeyCode() == 84)
                plateau.getVectBrique().clear();

            if (evt.getKeyCode() == 82)
                plateau.getVectSuperBrique().clear();

            if (evt.getKeyCode() == 39)
                plateau.getRaquette().setRight(true);

            if (evt.getKeyCode() == 32)
                plateau.setStart(true);
            if (evt.getKeyCode() 40 && evt.getKeyCode() 73)
                plateau.setStart(true);

        }

        public void keyTyped(KeyEvent evt) {
        }

        public void keyReleased(KeyEvent evt) {
            if (evt.getKeyCode() == 37) {
                plateau.getRaquette().setLeft(false);
            }

            if (evt.getKeyCode() == 39)
                plateau.getRaquette().setRight(false);
        }
    }
}
 

J'ai mis tt ma classe pr savoir si l'erreur ne vient pas de ma classe ( mais je ne pense pas ! )

Merci de bien vouloir m'expliquer la démarche a  suivre
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Dernière intervention
16 janvier 2009
5 nov. 2007 à 18:34
3
Merci
Bonjour,
tiens pas trop complexe quand même...
cordialement,
Pierrick

import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class TestMe extends JFrame {
    private static final long serialVersionUID = -5079381071348650570L;
    private Container container;

    public TestMe() {
        super("FenetrePrincipale");
        setBounds(0, 0, 100, 100);
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        container = this.getContentPane();
        container.setLayout(null);

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

        this.setVisible(true);

    }

    private class MyKeyListener implements KeyListener {
        private static final int INDETERMINATE = -1;
        private int previousKeyPressed = INDETERMINATE;
        public void keyPressed(KeyEvent evt) {
            System.out.println("keyPressed " + evt.getKeyCode());
            if( previousKeyPressed == INDETERMINATE )
                previousKeyPressed = evt.getKeyCode();
            else if( previousKeyPressed != evt.getKeyCode() ){
                System.out.println("OUAH deux touches en même temps : " + previousKeyPressed + " | " +evt.getKeyCode());
            }
        }

        public void keyTyped(KeyEvent evt) {}

        public void keyReleased(KeyEvent evt) {
            System.out.println("keyReleased " + evt.getKeyCode());
            if( previousKeyPressed == evt.getKeyCode() )
                previousKeyPressed = INDETERMINATE;
        }
    }
   
    public static void main(String[] args){
        new TestMe();
    }
}

Merci the_wwt 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de the_wwt
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
5 nov. 2007 à 17:19
0
Merci
oui je sais il n'y a encore rien ds mon MouseListener ... c'est encore a dev ...
Commenter la réponse de Nicolas___
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
5 nov. 2007 à 21:20
0
Merci
Salut:

Pour gérer la combinaison des touches clavier tu dois passer par la classe KeyStroke.
Commenter la réponse de Ombitious_Developper
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
6 nov. 2007 à 16:27
0
Merci
Merci Pierrick mais tu peux me dire c'est quoi ca :
private static final long serialVersionUID = -5079381071348650570L; ?

Ciao
Commenter la réponse de Nicolas___
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Dernière intervention
16 janvier 2009
6 nov. 2007 à 17:33
0
Merci
Bonjour,
je ne connais pas trop la swing donc c'est pour cela que j'ai proposé une solution algorithmique ( réponse à Ombitious ).
Content que ça t'aille.
Le serial version uid est pour qu'eclipse soit content car sinon on prend un warning a la compilation.
En fait toutes les classes implémentants Serializable (ic JFrame ) doivent posséder cet attribut. Cela doit être utilisé par les ObjectOutputStream pour enregistrer les objets.
Cordialement,
Pierrick
Commenter la réponse de the_wwt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.