Ecouteur d'évènement Java
Résolu
Pulsar360
Messages postés
113
Date d'inscription
Statut
Membre
Dernière intervention
-
Pulsar360 Messages postés 113 Date d'inscription Statut Membre Dernière intervention -
Pulsar360 Messages postés 113 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis sur un projet mais j'ai besoin de déplacer un élément dans une fenêtre Java grâce à des touches claviers ("a" et "q" pour déplacer l'élément vers le haut et le bas).
Mon problème est que je n'arrive pas à déplacer mon élément.
Voici mes classes:
// Class MaClasse
public class MaClasse {
public static void main(String[] args) {
Fenetre fen = new Fenetre();
}
}
-------------------------------------------------------------
// Classe Fenetre
public class Fenetre extends JFrame {
Table tab = new Table();
public Fenetre() {
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));
}
}
-------------------------------------------------------------
// Classe Table
import java.awt.*;
import javax.swing.*;
import java.awt.event.KeyEvent;
public class Table extends JPanel{
private int posXLT = 10;
private int posYHT = 10;
private int posXL = 10;
private int posYH;
public int getPosYH() {
return posYH;
}
public void setPosYH(int posYH) {
this.posYH = posYH;
}
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(posXL, posYH+5, (this.getHeight()/8/4), (this.getHeight()/8));
g.fillRect(posXL+10, posYH+30, (this.getHeight()/8/4), (this.getHeight()/8));
}
public void keyPressed(KeyEvent e) {
char touche = e.getKeyChar();
if ('a' == touche) {
posYH = posYH + 10;
} else if ('q' == touche) {
posYH = posYH - 10;
} else {
posYH++;
}
}
}
Si une âme charitable pouvais m'aider je l'en remercie d'avance car je suis en galère depuis un bon petit moment.
Je suis sur un projet mais j'ai besoin de déplacer un élément dans une fenêtre Java grâce à des touches claviers ("a" et "q" pour déplacer l'élément vers le haut et le bas).
Mon problème est que je n'arrive pas à déplacer mon élément.
Voici mes classes:
// Class MaClasse
public class MaClasse {
public static void main(String[] args) {
Fenetre fen = new Fenetre();
}
}
-------------------------------------------------------------
// Classe Fenetre
public class Fenetre extends JFrame {
Table tab = new Table();
public Fenetre() {
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));
}
}
-------------------------------------------------------------
// Classe Table
import java.awt.*;
import javax.swing.*;
import java.awt.event.KeyEvent;
public class Table extends JPanel{
private int posXLT = 10;
private int posYHT = 10;
private int posXL = 10;
private int posYH;
public int getPosYH() {
return posYH;
}
public void setPosYH(int posYH) {
this.posYH = posYH;
}
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(posXL, posYH+5, (this.getHeight()/8/4), (this.getHeight()/8));
g.fillRect(posXL+10, posYH+30, (this.getHeight()/8/4), (this.getHeight()/8));
}
public void keyPressed(KeyEvent e) {
char touche = e.getKeyChar();
if ('a' == touche) {
posYH = posYH + 10;
} else if ('q' == touche) {
posYH = posYH - 10;
} else {
posYH++;
}
}
}
Si une âme charitable pouvais m'aider je l'en remercie d'avance car je suis en galère depuis un bon petit moment.
A voir également:
- Ecouteur d'évènement Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
5 réponses
Bonsoir,
pour détecter les touches du clavier, il faut absolument implémenter la classe KeyListener. cette implémentation implique la redéfinition de ttes ses méthodes (keyPressed, KeyTyped et keyReleased).
(on peut par exemple les regrouper dans une classe interne ClavieListener par exemple, juste pour regrouper le code)
deux choses importantes manqué dans ton code:
- dans la classe Fenetre: this.addKeyListener(Classe KeyListener);
- la fonction repaint() qui ré-affiche ta fenetre avec ton panneau Table actualisé: this.repaint().
et voila ton code modifié:
//Classe MaClasse:
//Classe Fenetre:
//Classe Table (qui est un panneau normalement)
NB: Tu peux encore jouer sur l'affichage pour bien éliminer ttes les anomalies, mais l'idée principale de l'interface KeyListener reste la même.
Bonne chance
Being normal is boring... being geek is interesting
pour détecter les touches du clavier, il faut absolument implémenter la classe KeyListener. cette implémentation implique la redéfinition de ttes ses méthodes (keyPressed, KeyTyped et keyReleased).
(on peut par exemple les regrouper dans une classe interne ClavieListener par exemple, juste pour regrouper le code)
deux choses importantes manqué dans ton code:
- dans la classe Fenetre: this.addKeyListener(Classe KeyListener);
- la fonction repaint() qui ré-affiche ta fenetre avec ton panneau Table actualisé: this.repaint().
et voila ton code modifié:
//Classe MaClasse:
public class MaClasse { public static void main(String[] args) { Fenetre fen = new Fenetre(); } }
//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(800, 500); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //La fenetre doit ecouter les événnements du clavier //************************************************* this.addKeyListener(new ClavierListener()); this.setContentPane(tab); this.setBackground(new Color(200,200,200)); } class ClavierListener implements KeyListener{ @Override public void keyTyped(KeyEvent e) { if(e.getKeyChar()=='a') tab.setPosYH(tab.getPosYH()+10); else if(e.getKeyChar()=='q') tab.setPosYH(tab.getPosYH()-10); else tab.setPosYH(tab.getPosYH()+1); tab.repaint(); } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } } }
//Classe Table (qui est un panneau normalement)
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 posXL = 10; private int posYH; public int getPosYH() { return posYH; } public void setPosYH(int posYH) { this.posYH = posYH; } 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(posXL, posYH+5, (this.getHeight()/8/4), (this.getHeight()/8)); g.fillRect(posXL+10, posYH+30, (this.getHeight()/8/4), (this.getHeight()/8)); } }
NB: Tu peux encore jouer sur l'affichage pour bien éliminer ttes les anomalies, mais l'idée principale de l'interface KeyListener reste la même.
Bonne chance
Being normal is boring... being geek is interesting
Bonjour,
si on essaie d'espionner sur nos booleans, on peut détecter peut être une des limitation de la keyListener en java. Modifie le code de la classe Fenetre pour comme ainsi:
on remarque que pour le cas de ton probleme qu'après relaché la 2ieme touche, l'autre reste tjrs en true, mais il n'y a pas de rafraichissement, c'est a dire, que la methode keyTyped ne se déclenche pas.
j'ai encore introduit des espions pour voir les touches relâchées, meme remarque, quand on relache la 2ieme touche enfoncée, la première ne s'affiche pas comme touche enfoncée. ce qui preuve définitivement que la méthode keyTyped ne se déclenche pas.
je pense qu'il faut chercher encore, dans les Threads, la concurrence entre les touches (car l'ordre d'enfoncer et relacher les touches influence le fonctionnement de ton programme) ou peut etre une méthode sophistiquée pour corriger le problème.
Bonne chance
si on essaie d'espionner sur nos booleans, on peut détecter peut être une des limitation de la keyListener en java. Modifie le code de la classe Fenetre pour comme ainsi:
import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.Timer; public class Fenetre extends JFrame{ Table tab = new Table(); private boolean touchea = false; private boolean toucheq = false; private boolean touchep = false; private boolean touchem = false; private Thread thread; 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)); /*Timer timer = new Timer(2000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Etat des touches: \ta: "+touchea+",\t q: "+toucheq+",\t " + "p: "+touchep+",\t m: "+touchem); } }); timer.start();*/ } class ClavierListener implements KeyListener{ public void keyTyped(KeyEvent e) { String message= new String("touches enfoncées: "); int deplacement=1; if(touchea == true) { tab.setPosYHRG(tab.getPosYHRG()-deplacement); message+=", a";} if(toucheq == true) { tab.setPosYHRG(tab.getPosYHRG()+deplacement); message+=", q";} if(touchep == true) { tab.setPosYHRD(tab.getPosYHRD()-deplacement); message+=", p";} if(touchem == true) { tab.setPosYHRD(tab.getPosYHRD()+deplacement); message+=", m";} tab.repaint(); System.out.println(message); /*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) { String message= new String("touches relachées: "); if (e.getKeyChar()=='a') { touchea = false; message+="a";} else if (e.getKeyChar() == 'q') { toucheq = false; message+="q";} else if (e.getKeyChar()=='p') { touchep = false; message+="p";} else if (e.getKeyChar() == 'm') { touchem = false; message+="m";} System.out.println(message); } } }
on remarque que pour le cas de ton probleme qu'après relaché la 2ieme touche, l'autre reste tjrs en true, mais il n'y a pas de rafraichissement, c'est a dire, que la methode keyTyped ne se déclenche pas.
j'ai encore introduit des espions pour voir les touches relâchées, meme remarque, quand on relache la 2ieme touche enfoncée, la première ne s'affiche pas comme touche enfoncée. ce qui preuve définitivement que la méthode keyTyped ne se déclenche pas.
je pense qu'il faut chercher encore, dans les Threads, la concurrence entre les touches (car l'ordre d'enfoncer et relacher les touches influence le fonctionnement de ton programme) ou peut etre une méthode sophistiquée pour corriger le problème.
Bonne chance
Bonjour chef,
enfaite, la solution (pas encore testé) 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
Being normal is boring... being geek is interesting
enfaite, la solution (pas encore testé) 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
Being normal is boring... being geek is interesting
Bon j'ai un petit peu avancer (enfin je croit) mais ça ne fonctionne pas très bien, voir moins bien qu'avant vue que les raquettes ne bouge plus du tous. Mais je pense être sur la bonne voie.
Je te poste le codes si tu veux essayer de voir, mais le souci est certainement dans ma façon d'utiliser les Thread.
Voilas, j'ai séparer chaque Joueur et créer une classe Thread pour chaqu'un d'eux afin de pouvoir mieux moduler le code.
J'ai renommer les Classe avec un "E" car j'ai garder une copie d'un précédent code au cas ou il faille revenir en arrière.
Je te poste le codes si tu veux essayer de voir, mais le souci est certainement dans ma façon d'utiliser les Thread.
// Toujours la même classe Ping-Pong de départ: import java.awt.*; import javax.swing.*; public class PingPongE { public static void main(String[] args) { FenetreE fen = new FenetreE(); } } --------------------------------------------------------------------------------- // 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)); } } --------------------------------------------------------------------------------- // 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)); } } --------------------------------------------------------------------------------- //Nouvelle 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; } } } --------------------------------------------------------------------------------- // Nouvelle 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. } } --------------------------------------------------------------------------------- //Nouvelle 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; } } } --------------------------------------------------------------------------------- //Nouvelle 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. } }
Voilas, j'ai séparer chaque Joueur et créer une classe Thread pour chaqu'un d'eux afin de pouvoir mieux moduler le code.
J'ai renommer les Classe avec un "E" car j'ai garder une copie d'un précédent code au cas ou il faille revenir en arrière.
bon une lecture rapide de kelkin ki n'a pa dormi hier:
1-ta fenetre n'implemente pas l'interface keylistener, c pr ça ke tes objets ne bougent pas.
2-tabJ1 n'est pas relié dans la fenetre ou a la table du fenetre, d'abord ce le paintcomponent du Table qui permet de rafraichir les Objets ne sera pas appelé.
3- je sui totalement perdu dans le code des joueurs, manque du sommeil ou peut etre, mais je ne voit pa la liaison des joueurs dans la Table ou la fenetre, ils sont juste déclaré... ou peut etre je ne voi pa le code en clair.
entre autre c pr ça ke j'ai pensé à simplifier le probleme, puisk nous visons l'aide des autres. car personne ne va casser la tete pour comprendre le code completement et de proposer l'aide.
1-ta fenetre n'implemente pas l'interface keylistener, c pr ça ke tes objets ne bougent pas.
2-tabJ1 n'est pas relié dans la fenetre ou a la table du fenetre, d'abord ce le paintcomponent du Table qui permet de rafraichir les Objets ne sera pas appelé.
3- je sui totalement perdu dans le code des joueurs, manque du sommeil ou peut etre, mais je ne voit pa la liaison des joueurs dans la Table ou la fenetre, ils sont juste déclaré... ou peut etre je ne voi pa le code en clair.
entre autre c pr ça ke j'ai pensé à simplifier le probleme, puisk nous visons l'aide des autres. car personne ne va casser la tete pour comprendre le code completement et de proposer l'aide.
Voila le code ke j'ai fai pour pouvoir demandé l'aide: il s'agit tt simplement d'affiché les touches qui sont enfoncées.
je vais essayer avec ce code, de chercher comment introduire les Thread, puisk c le meme comportement de ton jeu ping pong (si j'apui sur A et pui sur B et je relache B, A ne se voi pa comme enfoncé <=> l'arrêt de la raquette 1)
Bonne chance
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.HashSet; import java.util.Iterator; import javax.swing.JFrame; public class Clavier extends JFrame implements KeyListener { private HashSet<Character> touches = new HashSet<Character>(); public Clavier(){ this.setSize(120, 100); this.addKeyListener(this); this.setLocationRelativeTo(null); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void keyPressed(KeyEvent arg0) { touches.add(arg0.getKeyChar()); } @Override public void keyReleased(KeyEvent arg0) { touches.remove(arg0.getKeyChar()); if(touches.isEmpty()) System.out.println("Aucune touche n'est enfoncée"); } @Override public void keyTyped(KeyEvent arg0) { String message= new String("Les touches enfoncées sont: "); Iterator iter= touches.iterator(); while(iter.hasNext()){ //if(e.) message+=", "+iter.next(); } System.out.println(message); } public static void main(String[] args) { Clavier clavier= new Clavier(); } }
je vais essayer avec ce code, de chercher comment introduire les Thread, puisk c le meme comportement de ton jeu ping pong (si j'apui sur A et pui sur B et je relache B, A ne se voi pa comme enfoncé <=> l'arrêt de la raquette 1)
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
// Classe MyKeyAdapter :
// Classe ThreadA :
// Classe ThreadB :
VOILAAAAAAAAS !!
Bien sure quelques modifications apporté serait pas une mauvaise idée.
Je poste la SOLUTION pour ceux qui un jour en aurai besoin :
// Classe Test :
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 :
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 :
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 :
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.
Je viens d'utiliser ta correction et j'ai rajouter deux trois truc, par contre j'ai un autre souci, j'essaye de faire un pingpong à deux joueur sur le même clavier, seulement il n'est possible de gérer que une seul entrer clavier à la fois, c'est à dire si le premier joueur bouge ça raquette le deuxième joueur ne peut pas bouger la sienne (sauf en interrompant l'action du joueur 1).
Voici le nouveau code:
Voici la solution si ça intéresse quelqu'un un jour, il vous suffit de remplacer ma classe fenetre par ceci:
Par contre je rencontre encore un souci en faisant comme cela; disons que le joueur 1 appuis sur 'q' pour descendre ça raquette et juste après le joueur 2 appuie sur 'm' pour baisser la sienne également, et bien les deux raquettes baisse, MAIS si le joueur 2 arrête d'appuyer sur 'm' ce sont les deux raquettes qui s'arrête, hors j'aimerais que la raquette du joueur 1 continue ça course vue que lui est encore en train d'appuyer sur le bouton 'q'.
Quelqu'un pour m'aider?
P.S.: Les 2 raquettes peuvent sortir hors de la fenêtre avec ce code car j'ai pas laisser les limites, si vous les souhaitez il vous suffit de les rajouter.