Problème SWING

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   -
Bonjour,

Je suis en train de m'entraîner à coder, pour cela je code un petit jeu de ping pong à deux joueur sur le même clavier, seulement quand je déplace la raquette elle ne bouge pas, je ne vois ps où est mon problème.

Voici mon code:

//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("salut");
		fen.setSize(400,200);
		fen.addKeyListener(adapt);
		fen.setVisible(true);
		fen.setContentPane(new Table());
		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;
	
	public void keyPressed(KeyEvent e) {
		if(e.getKeyCode()== 0x41) {
			isAPressed = true; }
		if(e.getKeyCode()== 0x42) {
			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;
	Table tab = new Table();
	
	public ThreadA(boolean joueur1) {
	this.joueur1 = joueur1; }
	
	public void run() {
		if(joueur1 == true)
			System.out.println(joueur1 + " Salut.");
			tab.setPosYHRG(tab.getPosYHRG()-10);} }


//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."); } }


//Classe Table:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;


public class Table extends JPanel {
	
	private int posXLT = 10;
	private int posYHT = 10;
	
	private int posXLRG = 10;
	private int posYHRG = 10;
	
	private int posXLRD = 10;
	private int posYHRD = 10;
	
	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)); }

	public int getPosYHRG() {
		return posYHRG; }

	public void setPosYHRG(int i) {
	} }

1 réponse

Pulsar360 Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   10
 
Et bien je me suis débrouille sans vous.
Voici la correction :

// 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("salut");
		fen.setSize(400,200);
		fen.addKeyListener(adapt);
		Table tab = new Table();
		fen.setContentPane(tab);
		fen.setVisible(true);
		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
 
		int i = 100;
		while (i > 0) {
 
			ThreadA  tA = new ThreadA(adapt.doAction(),tab);
			tA.start();
 
			ThreadB  tB = new ThreadB(adapt.doAction2());
			tB.start();
 
		        try { 
                               Thread.sleep(60); 
                        }
		        catch (InterruptedException ie) { 
                               ie.printStackTrace(); 
                        } 
               } 
       }
}



//Classe MyKeyAdapter: (Celle ci n'a pas changer)

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class MyKeyAdapter extends KeyAdapter {
	
	private boolean isAPressed = false;
	private boolean isBPressed = false;
	
	public void keyPressed(KeyEvent e) {
		if(e.getKeyCode()== 0x41) {
			isAPressed = true; }
		if(e.getKeyCode()== 0x42) {
			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;
	Table tab ;
 
	public ThreadA(boolean joueur1,Table tab) {
	          this.joueur1 = joueur1; 
	          this.tab = tab;
        }
 
	public void run() {
		if(joueur1 == true) {
			System.out.println(joueur1 + " Salut.");
			tab.setPosYHRG(tab.getPosYHRG()+10);
			tab.repaint();
		}
	} 
}

// Classe ThreadB: (Elle n'a pas changer):

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."); } }

// Classe Table:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;


public class Table extends JPanel {
	
	private int posXLT = 10;
	private int posYHT = 10;
	
	private int posXLRG = 10;
	private int posYHRG = 10;
	
	private int posXLRD = 10;
	private int posYHRD = 10;
	
	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)); }
	

	public int getPosYHRG() {
		return posYHRG; }

	public void setPosYHRG(int i) {
		posYHRG = i;
	} }





Voilas, rien de bien méchant, juste des petits oublies.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"Et bien je me suis débrouille sans vous."
"Voilas, rien de bien méchant, juste des petits oublies."

Bah oui, mais si tu vas plus vite que nous aussi ^^

À l'occasion je regarderais peut-être ton code complet pour "critiquer" si tu veux, en attendant j'ai juste regardé vite fait, et il y a une monstruosité qui me saute aux yeux :

Quand tu fais (par exemple)

public void keyPressed(KeyEvent e) {
	if(e.getKeyCode()== 0x41) {
		isAPressed = true; }
	if(e.getKeyCode()== 0x42) {
		isBPressed = true; } }

Il serait beaucoup plus compréhensible d'utiliser les constantes de la classe KeyEvent :

public void keyPressed(KeyEvent e)
{
	switch (e.getKeyCode())
	{
		case KeyEvent.VK_A : isAPressed = true; break;
		case KeyEvent.VK_B : isBPressed = true; break;
	}
}
0
Pulsar360 Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   10
 
C'était pas méchamment que j'ai dit ça =), je me doute qu'il n'est pas possible de répondre à tous le monde et rapidement en plus.

Ben justement, comme tu le vois il y a des "monstruosités" parce que je n'est que 2 mois de JAVA derrière moi, et je n'est aucun autre moyen d'apprendre que de par moi même (tuto, livre, forum,...) du coup je suis totalement ouvert au critique, t'en quelle sont constructives bien sûr, ça ne peut faire que m'aider.
J'ai rajouter les morceaux de code qu'il manquer (pour déplacer correctement les deux raquettes) et je peut te le transmettre si tu veux pour critiquer, si tu le temps bien sur.

Merci pour ton aide en tous cas.
0