IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

KeyListener et le Multi-Touch


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chasseur Alpin
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Par défaut KeyListener et le Multi-Touch
    Bonjour,

    Je suis actuellement en train d'apprendre le JAVA et pour m’entraîner je créer un petit jeu de Ping-Pong à deux joueurs sur le même clavier, mais j'ai un souci au niveau des raquettes, quand par exemple le joueur1 fait bouger sa raquette et que le joueur2 se met aussi à faire bouger ça raquette tous va bien, mais, si le joueur2 relâche le bouton pour ne plus la déplacer alors la raquette du joueur1 s'arrête aussi alors qu'il est encore en train d'appuyer sur son bouton.

    Si une personne pouvais me donner un coup de main ça serais très sympas de ça part et l'en remercie d'avance.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    //Classe Ping-Pong
     
    import java.awt.*;
    import javax.swing.*;
     
    public class PingPong {
    	public static void main(String[] args) {
    	FenetreT2 fen = new FenetreT2();
    	}
    }
     
    -----------------------------------------------
     
    //Classe Fenetre
     
    import java.awt.Color;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
     
    public class Fenetre extends JFrame {
    	Table tab = new Table();
    	public Fenetre() {
    	this.setTitle("Salut");
    	this.setSize(859, 568);
    	this.setLocationRelativeTo(null);
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setVisible(true);
    	this.addKeyListener(new ClavierListener());
    	this.setContentPane(tab);
    	this.setBackground(new Color(200,200,200));
    	}
     
    	class ClavierListener implements KeyListener {
    	private boolean touchea = false;
    	private boolean toucheq = false;
    	private boolean touchep = false;
    	private boolean touchem = false;
     
    	public void keyTyped(KeyEvent e) {
     
    	if(touchea == true) {
    	tab.setPosYHRG(tab.getPosYHRG()-10); }
    	if(toucheq == true) {
    	tab.setPosYHRG(tab.getPosYHRG()+10); }
    	if(touchep == true) {
    	tab.setPosYHRD(tab.getPosYHRD()-10); }
    	if(touchem == true) {
    	tab.setPosYHRD(tab.getPosYHRD()+10); }
    	tab.repaint();
     
    		try { Thread.sleep(1); }
    		catch (InterruptedException ie) { ie.printStackTrace(); }
    	}
     
    	public void keyPressed(KeyEvent e) {
     
    	if (e.getKeyChar()=='a') {
    	touchea = true; }
    	else if (e.getKeyChar() == 'q') {
    	toucheq = true; }
    	else if (e.getKeyChar()=='p') {
    	touchep = true; }
    	else if (e.getKeyChar() == 'm') {
    	touchem = true; }
    	}
     
    	public void keyReleased(KeyEvent e) {
     
    	if (e.getKeyChar()=='a') {
    	touchea = false; }
    	else if (e.getKeyChar() == 'q') {
    	toucheq = false; }
    	else if (e.getKeyChar()=='p') {
    	touchep = false; }
    	else if (e.getKeyChar() == 'm') {
    	touchem = false; }
    	}
    	}
    }
     
    -----------------------------------------------
     
    //Classe Table
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import javax.swing.JPanel;
     
    public class Table extends JPanel {
     
    	private int posXLT = 10;
    	private int posYHT = 10;
     
    	private int posXLRG = 20;
    	private int posYHRG;
     
    	private int posXLRD = 20;
    	private int posYHRD;
     
    	public int getPosYHRG() {
    	return posYHRG;
    	}
     
    	public void setPosYHRG(int posYHRG) {
    	this.posYHRG = posYHRG;
    	}
     
    	public int getPosYHRD() {
    	return posYHRD;
    	}
     
    	public void setPosYHRD(int posYHRD) {
    	this.posYHRD = posYHRD;
    	}
     
    	public void paintComponent(Graphics g) {
     
    	g.setColor(new Color(240,240,240));
    	g.fillRect(posXLT, posYHT, (this.getWidth() - posXLT*2), (this.getHeight() - posYHT*2));
    	g.setColor(new Color(0,0,0));
    	g.fillRect(posXLRG, posYHRG+10, (this.getHeight()/8/4), (this.getHeight()/8));
    	g.fillRect(this.getWidth()-20-(this.getHeight()/8/4), posYHRD+10, (this.getHeight()/8/4), (this.getHeight()/8));
    	}
    }

  2. #2
    Invité de passage
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1
    Par défaut Multi Thread
    Bonjour pulsar,

    enfaite, la solution (pas encore testée) vient d'être confirmé par un de mes amis.
    il consiste à créer un Thread quand on appuie sur une touche, et de le tuer (le meme Thread) quand on relache la touche qui la déclencher.

    techniquement je ne sais pas encore comment introduire le thread, mais je vais chercher des exemples et faire l'echange avec toi.

    Bonne chance

    Walid CHEIKH

  3. #3
    Membre averti
    Homme Profil pro
    Chasseur Alpin
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Par défaut Une amélioration?
    Bonjour,
    J'ai essayer d'ajouter des Thread, mais je ne sais pas bien l'utiliser, donc je poste ce que j'ai pu faire pour le moment, en tous cas mes raquettes ne bouge plus maintenant, si quelqu'un pouvais m'aider =).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Classe Ping Pong:
     
    import java.awt.*;
    import javax.swing.*;
     
    public class PingPongE {
    	public static void main(String[] args) {
    	FenetreE fen = new FenetreE();
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // Classe FenetreE:
     
    import java.awt.Color;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
     
    public class FenetreE extends JFrame {
    	TableE tab = new TableE();
    	Joueur1 j1 = new Joueur1();
    	Joueur2 j2 = new Joueur2();
     
    	public FenetreE() {
    	this.setTitle("Salut");
    	this.setSize(800, 500);
    	this.setLocationRelativeTo(null);
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setVisible(true);
    	this.setContentPane(tab);
    	this.setBackground(new Color(200,200,200));
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    // Classe TableE:
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import javax.swing.JPanel;
     
    public class TableE extends JPanel {
     
    	private int posXLT = 10;
    	private int posYHT = 10;
     
    	private int posXLRG = 20;
    	private int posYHRG;
     
    	private int posXLRD = 20;
    	private int posYHRD;
     
    	public int getPosYHRG() {
    	return posYHRG;
    	}
     
    	public void setPosYHRG(int posYHRG) {
    	this.posYHRG = posYHRG;
    	}
     
    	public int getPosYHRD() {
    	return posYHRD;
    	}
     
    	public void setPosYHRD(int posYHRD) {
    	this.posYHRD = posYHRD;
    	}
     
    	public void paintComponent(Graphics g) {
     
    	g.setColor(new Color(240,240,240));
    	g.fillRect(posXLT, posYHT, (this.getWidth() - posXLT*2), (this.getHeight() - posYHT*2));
    	g.setColor(new Color(0,0,0));
    	g.fillRect(posXLRG, posYHRG+10, (this.getHeight()/8/4), (this.getHeight()/8));
    	g.fillRect(this.getWidth()-20-(this.getHeight()/8/4), posYHRD+10, (this.getHeight()/8/4), (this.getHeight()/8));
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    //Classe Joueur1:
     
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    	class Joueur1 implements KeyListener{
     
    	private boolean touchea = false;
    	private boolean toucheq = false;
     
    	public boolean getTouchea() {
    	return touchea;
    	}
     
    	public void setTouchea(boolean touchea) {
    	this.touchea = touchea;
    	}
     
    	public boolean getToucheq() {
    	return toucheq;
    	}
     
    	public void setToucheq(boolean toucheq) {
    	this.toucheq = toucheq;
    	}
     
    	TableE tabJ1 = new TableE();
     
    	public void keyTyped(KeyEvent e) {
     
    	ThreadJoueur1 joueur1 = new ThreadJoueur1();
    	joueur1.start();
     
    	//Je ne sais pas si il faut mettre repaint ici...
    	tabJ1.repaint();
     
    	//c'est peut etre pas utilise de mettre le thread.sleep() ici si on le met dans ThreadJoueur1
    	/*	try { Thread.sleep(1); }
    		catch (InterruptedException ie) { ie.printStackTrace(); }*/
    	}
     
    	public void keyPressed(KeyEvent e) {
     
    	if (e.getKeyChar()=='a') {
    	touchea = true; }
    	else if (e.getKeyChar() == 'q') {
    	toucheq = true; }
    	}
     
    	public void keyReleased(KeyEvent e) {
     
    	if (e.getKeyChar()=='a') {
    	touchea = false; }
    	else if (e.getKeyChar() == 'q') {
    	toucheq = false; }
    	}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //Classe ThreadJoueur1:
     
    class ThreadJoueur1 extends Thread {
    	ThreadJoueur1() {
    	// ... code du constructeur ???? peut etre à créer, je ne sais pas encore ce qu'il faut mettre ici
     
     
    	}
     
    	public void run() {
    	Joueur1 joueur1 = new Joueur1();
    	TableE tableJ1 = new TableE();
     
    	if(joueur1.getTouchea() == true) {
    	tableJ1.setPosYHRG(tableJ1.getPosYHRG()-10); }
    	//penser au conflie si joueur1 appuie sur 'a' ET sur 'q'.
    	else if(joueur1.getToucheq() == true) {
    	tableJ1.setPosYHRG(tableJ1.getPosYHRG()+10); }
     
    	//mettre un Threas.sleep() dans un catch pour executer seulement un temps ce thread ci et laisser un 
    	// autre threas s'executer pour permettre au joueur2 de déplacer ca raquette a lui aussi.
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    //Classe Joueur2:
     
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    	class Joueur2 implements KeyListener{
     
    	private boolean touchep = false;
    	private boolean touchem = false;
     
    	public boolean getTouchep() {
    	return touchep;
    	}
     
    	public void setTouchep(boolean touchep) {
    	this.touchep = touchep;
    	}
     
    	public boolean getTouchem() {
    	return touchem;
    	}
     
    	public void setTouchem(boolean touchem) {
    	this.touchem = touchem;
    	}
     
    	TableE tabJ2 = new TableE();
     
    	public void keyTyped(KeyEvent e) {
     
    	ThreadJoueur2 joueur2 = new ThreadJoueur2();
    	joueur2.start();
     
    	//C'est peut etre inutile de mettre le repaint ici si on peut le mettre dans le thread joueur1
    	tabJ2.repaint();
     
    	//c'est peut etre pas utilise de mettre le thread.sleep() ici si on le met dans ThreadJoueur1
    	/*	try { Thread.sleep(1); }
    		catch (InterruptedException ie) { ie.printStackTrace(); }*/
    	}
     
    	public void keyPressed(KeyEvent e) {
     
    	if (e.getKeyChar()=='p') {
    	touchep = true; }
    	else if (e.getKeyChar() == 'm') {
    	touchem = true; }
    	}
     
    	public void keyReleased(KeyEvent e) {
     
    	if (e.getKeyChar()=='p') {
    	touchep = false; }
    	else if (e.getKeyChar() == 'm') {
    	touchem = false; }
    	}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //Classe ThreadJoueur2:
     
    class ThreadJoueur2 extends Thread {
    	ThreadJoueur2() {
    	// ... code du constructeur ???? peut etre à créer, je ne sais pas encore ce qu'il faut mettre ici
     
     
    	}
     
    	public void run() {
    	Joueur2 joueur2 = new Joueur2();
    	TableE tableJ2 = new TableE();
     
    	if(joueur2.getTouchep() == true) {
    	tableJ2.setPosYHRG(tableJ2.getPosYHRG()-10); }
    	//penser au conflie si joueur1 appuie sur 'a' ET sur 'q'.
    	else if(joueur2.getTouchem() == true) {
    	tableJ2.setPosYHRG(tableJ2.getPosYHRG()+10); }
     
    	//mettre un Threas.sleep() dans un catch pour executer seulement un temps ce thread ci et laisser un 
    	// autre threas s'executer pour permettre au joueur2 de déplacer ca raquette a lui aussi.
    	}
    }
    J'ai séparer chaque joueur et chaque thread dans une classe pour mieux m'y repérer.

    Donc si quelqu'un pouvais me dire où j'ai mal fait ça serait sympas.

  4. #4
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Bonjour,

    faire le delacement dans "keyPressed" plutot que dans keyTyped?

  5. #5
    Membre averti
    Homme Profil pro
    Chasseur Alpin
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Par défaut
    C'est bon j'ai réussis, j'ai galérer pendant 1 semaine.
    Je poste la SOLUTION pour ceux qui un jour en aurai besoin :

    // Classe Test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    import javax.swing.JFrame;
     
    public class Test {
     
    	public static void main(String[] args) {
     
    		MyKeyAdapter adapt = new MyKeyAdapter();
     
    		JFrame fen = new JFrame();
    			fen.setTitle("Test");
    			fen.setSize(200,100);
    			fen.addKeyListener(adapt);
    			fen.setVisible(true);
    			fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    			int i = 100;
    			while (i > 0) {
     
    			ThreadA  tA = new ThreadA(adapt.doAction());
    			tA.start();
     
    			ThreadB  tB = new ThreadB(adapt.doAction2());
    			tB.start();
     
    			try { Thread.sleep(60); }
    			catch (InterruptedException ie) { ie.printStackTrace(); } } } }
    // Classe MyKeyAdapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
     
    public class MyKeyAdapter extends KeyAdapter {
     
    	private boolean isAPressed = false;
    	private boolean isBPressed = false;
    	private boolean presser = false;
     
    	public boolean getPresser() {
    	return presser;}
    	public void setPresser(boolean presser) {
    	this.presser = presser;
    	}
     
    	public void keyPressed(KeyEvent e) {
    		if(e.getKeyCode()== 0x41) {
    			presser = true;
    			isAPressed = true; } 
     
    		if(e.getKeyCode()== 0x42) {
    			presser = true;
    			isBPressed = true; } }
     
    	public void keyReleased(KeyEvent e) {
    		if(e.getKeyCode()== 0x41) {
    			isAPressed = false; }
     
    		if(e.getKeyCode()== 0x42) {
    			isBPressed = false; } }
     
    	public boolean doAction() {
    		return isAPressed; }
     
    	public boolean doAction2() {
    		return isBPressed; } }
    // Classe ThreadA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class ThreadA extends Thread {
     
    	private boolean joueur1;
     
    	public ThreadA(boolean joueur1) {
    		this.joueur1 = joueur1; }
     
    	public void run() {
    		if(joueur1 == true)
    		System.out.println(joueur1 + " Salut"); } }
    // Classe ThreadB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class ThreadB extends Thread {
     
    	private boolean joueur1;
     
    	public ThreadB(boolean joueur1) {
    		this.joueur1 = joueur1; }
     
    	public void run() {
    		if(joueur1 == true)
    		System.out.println(joueur1 + " Coucou"); } }
    VOILAAAAAAAAS !!

    Bien sure quelques modifications apporté serait pas une mauvaise idée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour : Multi-Touch Trackpad pour Windows
    Par kOrt3x dans le forum Apple
    Réponses: 0
    Dernier message: 12/08/2009, 10h56
  2. Réponses: 12
    Dernier message: 27/12/2008, 16h42
  3. Multi-Touch Trackpad Update pour Windows XP & Vista
    Par aodix dans le forum Windows
    Réponses: 0
    Dernier message: 19/12/2008, 08h43
  4. [Projet] Nouvelle distribution Linux Multi - Touch
    Par anthonys dans le forum Distributions
    Réponses: 0
    Dernier message: 04/08/2008, 01h13
  5. Gestion flèches clavier multi touches
    Par PoZZyX dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/12/2007, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo