Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec le JPanel

Je n'arrive pas a animer plus de deux boules

    25 mars 2009 à 20:48:23

    bonsoir,
    J'aimerais bien qu'on m'aide a trouver ou est le problème . J'ai pris l'exemple d'une animation d'une boule du tuto du sdz mais je n'arrive pas a faire suivre une deuxième :-° .

    Meme en créant une nouvelle classe pour la deuxième boule aucun résultat car l'on peut mettre qu'un objet dans this.setContentPane(obj) et this.getContentPane().add(obj); ça fonctionne pas non plus, la boule vert et jaune ne bouge pas d'une pixel :euh:

    Voici les classes ce serait sympa de m'aider :) car je ne débuterais pas l'interaction tant que je n'ai pas compris ces chapitres.

    Panneau :

    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    
    import javax.swing.JPanel;
     
    public class Panneau extends JPanel {
     
            private int posX = -50;
            private int posY = -50;
            private int posZ = -40;
            private int posT = -40;
    
    		public void paintComponent(Graphics graphe){
            	
            	
                graphe.setColor(Color.white);
                graphe.fillRect(0, 0, this.getWidth(), this.getHeight());
                Graphics2D g2d = (Graphics2D) graphe;
            	GradientPaint gp = new GradientPaint(0,0,Color.black,30,30,Color.red,true);
        		g2d.setPaint(gp);
        		g2d.fillOval(posX, posY, 50, 50); 
        		
        		
        		Graphics2D g2d2 = (Graphics2D) graphe;
            	GradientPaint gp2 = new GradientPaint(0,0,Color.green,30,30,Color.yellow,true);
        		g2d2.setPaint(gp2);
        		g2d2.fillOval(posZ, posT, 50, 50); 
                   
            }
     
            public int getPosZ() {
    			return posZ;
    		}
    
    		public void setPosZ(int posZ) {
    			this.posZ = posZ;
    		}
    
    		public int getPosT() {
    			return posT;
    		}
    
    		public void setPosT(int posT) {
    			this.posT = posT;
    		}
    
    		public int getPosX() {
                    return posX;
            }
     
            public void setPosX(int posX) {
                    this.posX = posX;
            }
     
            public int getPosY() {
                    return posY;
            }
     
            public void setPosY(int posY) {
                    this.posY = posY;
            }
            
    }
    


    Fenetre

    import java.awt.Dimension;
     
    import javax.swing.JFrame;
     
     
    public class Fenetre extends JFrame{
     
            private Panneau pan = new Panneau();
            
            public Fenetre(){
                    
                    this.setTitle("Animation");
                    this.setSize(300, 300);
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    this.setLocationRelativeTo(null);
                    this.setContentPane(pan);
                    this.setVisible(true);
                    
                    go_usma();
                    go_jsk();
            }
            
            private void go_usma(){
                
             
                int x = pan.getPosX(), y = pan.getPosY();
             
                boolean backX = false;
             
                boolean backY = false;
             
                while(true){
                        
                       
                        if(x < 1)backX = false;
                       
                        if(x > pan.getWidth()-50) backX = true;
                        
                       
                        if(y < 1)backY = false;
                        if(y > pan.getHeight()-50) backY = true;
                        
                       
                        if(!backX)
                                pan.setPosX(++x);
                       
                        else
                                pan.setPosX(--x);
                        
                   
                        if(!backY)
                                pan.setPosY(++y);
                        else
                                pan.setPosY(--y);
                                
                      
                        pan.repaint();
                        
                    
                        try {
                                Thread.sleep(3);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
            }
                
       private void go_jsk(){
                
               
                int z = pan.getPosZ(), t = pan.getPosT();
        
                boolean backZ = false;
             
                boolean backT = false;
                
         
                while(true){
                        
                        
                        if(z < 1)backZ = false;
                    
                        if(z > pan.getWidth()-50) backZ = true;
                        
                        
                        if(t < 1)backT = false;
                        if(t > pan.getHeight()-50) backT = true;
                        
                     
                        if(!backZ)
                                pan.setPosZ(++z);
                       
                        else
                                pan.setPosZ(--z);
                        
                       
                        if(!backT)
                                pan.setPosT(++t);
                        else
                                pan.setPosT(--t);
                                
                       
                        pan.repaint();
                         try {
                                Thread.sleep(2);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
            }
                
                    
                    
            }
    


    Test
    public class Test {
    
    	public static void main(String[] args){
    		Fenetre win = new Fenetre();
    	}
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2009 à 22:12:56

      Ca va être long à expliquer...
      Le problème c'est que t'as juste fait du copier coller du code du site sans le comprendre. Si tu souhaites vraiment progresser essaie de refaire ce code toi-même. Tu verras que y'a un problème au niveau de tes méthodes go.
      T'as pas du remarquer puisque tu n'essaies pas entièrement tout seul, mais les boules sont pas des objets dans ton code. C'est juste un JPanel qui s'occupe de dessiner une forme géométrique qui correspond à un disque.
      Il serait donc plus logique de créer une classe boule, qui sache se représenter par l'intermédiaire d'un objet Graphics, et qui se fassent dessiner par un JPanel.

      Ebauche rapide (je te laisse te débrouiller pour le code) :
      • une classe Boule qui contienne une méthode afficher(Graphics g)
      • un JPanel qui s'occupera de dessiner les deux boules par l'intermédiaire de leur méthode afficher
      • quant à la méthode go, personnellement je la mettrais dans la classe Boule


      Bon courage ;)
      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2009 à 18:18:39

        C'est noté, je réessaye avec ta méthode et j'envoie le code maj
        • Partager sur Facebook
        • Partager sur Twitter

        Problème avec le JPanel

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown