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

Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 5 nov. 2007 à 17:17 - Dernière réponse : the_wwt 177 Messages postés jeudi 5 octobre 2006Date d'inscription 16 janvier 2009 Dernière intervention
- 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 

5 réponses

Répondre au sujet
the_wwt 177 Messages postés jeudi 5 octobre 2006Date d'inscription 16 janvier 2009 Dernière intervention - 5 nov. 2007 à 18:34
+3
Utile
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();
    }
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de the_wwt
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 5 nov. 2007 à 17:19
0
Utile
oui je sais il n'y a encore rien ds mon MouseListener ... c'est encore a dev ...
Commenter la réponse de Nicolas___
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 5 nov. 2007 à 21:20
0
Utile
Salut:

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

Ciao
Commenter la réponse de Nicolas___
the_wwt 177 Messages postés jeudi 5 octobre 2006Date d'inscription 16 janvier 2009 Dernière intervention - 6 nov. 2007 à 17:33
0
Utile
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.