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

Signaler
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
-
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
16 janvier 2009
-
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

5 réponses

Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
16 janvier 2009
1
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();
    }
}
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
oui je sais il n'y a encore rien ds mon MouseListener ... c'est encore a dev ...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Pour gérer la combinaison des touches clavier tu dois passer par la classe KeyStroke.
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
Merci Pierrick mais tu peux me dire c'est quoi ca :
private static final long serialVersionUID = -5079381071348650570L; ?

Ciao
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
16 janvier 2009
1
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