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

AWT/Swing Java Discussion :

Problème en SWING


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chasseur Alpin
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut Problème en SWING
    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 :
    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("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 :
    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
     
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    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:
    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."); } }
    //Classe Table:
    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
     
    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) {
    	} }

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Si on garde l'architecture que tu proposes et qui n'est pas optimale, le problème principale provient de ta classe ThreadA dans laquelle tu recrées une Table alors que la table qui est affichée a déja été crée dans Test.

    Donc ta raquette bouge bien mais sur la Table qui n'est pas affichée.

    Une solution consiste à passer la Table initiale en paramètre de ton ThreadA comme ceci :

    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
    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();
    		}
    	} 
    }
    maintenant, dans ta classe Test tu nommes ta table et tu modifies l'appel à ThreadA :

    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
     
    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);
    		Table tab = new Table();
    		fen.setContentPane(tab);
    		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(); 
                            } 
                   } 
           }
    }
    essayes d'indenter ton code quand tu écris afin de voir plus facilement quelle accolade de fin correspond avec celle de début. Ca t'évitera beaucoup de soucis.

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

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Merci à toi pour ton aide.

    Je c'est que l'indentation n'est pas comme il le faudrait mais j'ai un écran 10 pouces, ça me permet de voir plus de code à la fois.

    J'ai modifier tous comme tu me l'a conseiller mais ça ne fonctionne toujours pas.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Oui effectivement,
    j'ai oublié de te parler d'une autre erreur dans la fonction setPosYHRG() de ta classe Table. Tu n'as rien mis dedans alors que tu l'utilises dans ThreadA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setPosYHRG(int i) {
    		posYHRG = i;
    	}
    Et dernière chose pour que l'image s'affiche sans avoir a redimensionner la fenetre il faut afficher tout ce dont tu as besoin dans ton JFrame avant d'invoquer la methose setVisible(true) en l'occurence ta Table. Modifie Test comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    Table tab = new Table();
    		fen.setContentPane(tab);
    		fen.setVisible(true);

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

    Informations professionnelles :
    Activité : Chasseur Alpin

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Merciiiiiiiiiiii, cela fonctionne parfaitement, je suis débutant, je n'est que 2 mois de JAVA et j'apprend seul avec des tuto's. Merci de ton aide, j'aurais du voir c'est erreur toute "bête".

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

Discussions similaires

  1. Problème BDD - Swing
    Par Ercan67000 dans le forum AWT/Swing
    Réponses: 41
    Dernier message: 05/01/2012, 09h11
  2. Problème avec Swing
    Par adel.med dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 2
    Dernier message: 31/12/2009, 21h54
  3. Problème compatibilité Swing et Réseau
    Par Mithandir dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 05/03/2009, 14h01
  4. Divers problèmes avec Swing
    Par ratakses dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/09/2006, 21h57
  5. [swing][JComboBox]Problème de taille
    Par n!co dans le forum Composants
    Réponses: 8
    Dernier message: 06/03/2004, 10h53

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