[java]mon animation marche envers

[Résolu/Fermé]
Signaler
-
 domxaline -
bonjour
j'ai écris ce prg,mais le pb,l'animation marche envers quand je clique sur le bouton Go,
mon animation s'arrête,veuillez m'aider corriger mon prg svp

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JButton; 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Fenetre extends JFrame implements ActionListener
{ 
   private Panneau pan=new Panneau(); 
   private JButton bouton=new JButton("Go");
   private JButton bouton2=new JButton("Stop");
   
   private JPanel container=new JPanel();
   private JLabel label = new JLabel("Le JLabel");
 
   private int compteur =0;
   private boolean animated=true;
   private boolean backX,backY;
   private int x,y;
  public Fenetre()
    {
       this.setTitle("Animation");
       this.setSize(300,300);
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setLocationRelativeTo(null);
       container.setBackground(Color.white);
       container.setLayout(new BorderLayout());
       container.add(pan,BorderLayout.CENTER); 
       bouton.addActionListener(new BoutonListener());
       bouton.setEnabled(false);
       bouton2.addActionListener(new Bouton2Listener());
       JPanel south=new JPanel();
       south.add(bouton);
       south.add(bouton2);
       container.add(south,BorderLayout.SOUTH);
       Font police=new Font("Tahoma",Font.BOLD,16);
       label.setFont(police);
       label.setForeground(Color.blue);
       label.setHorizontalAlignment(JLabel.CENTER);
       container.add(label,BorderLayout.NORTH);
       this.setContentPane(container);
        this.setVisible(true);
      go ( ); 
   }
    private void go ( )
   {
           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)
                    {
                        e.printStackTrace();
                    }
         } 
    }


   /****classe qui écoute notre bouton1 Go******/
   class BoutonListener implements ActionListener
   {
    public void actionPerformed(ActionEvent arg0)
    {
    animated=true;
    bouton.setEnabled(true);
    bouton2.setEnabled(false);
    go();
    }
   }
   
   /****classe qui écoute notre bouton2 Stop******/
   class Bouton2Listener implements ActionListener
   {
    {
     animated=false;
     bouton.setEnabled(true);
     bouton2.setEnabled(false);   
           }
      }
}
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Panneau extends JPanel
{
     private int posX=-50;
     private int posY=-50;
     public void paintComponent (Graphics g)
     {
            g.setColor (Color.white); 
            g.fillRect (0,0,this.getWidth ( ),this.getHeight ( ));  
            g.setColor (Color.red);  
            g.fillOval (posX,posY,50,50);
    }

    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;
    }
  }

 import java.awt.Color;
 import java.awt.Font;
 import java.awt.FontMetrics;
 import java.awt.GradientPaint;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Image;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.io.File;
 import java.io.IOException;
 import javax.imageio.ImageIO;
 import javax.swing.JButton;

public class Bouton extends JButton implements MouseListener
{
  private String name;
  private Image img;
  public Bouton(String str)
  {
     super(str);
     this.name=str;
     try
         {
             img=ImageIO.read(new File("FondBouton.png")); 
         }
     catch(IOException e)
        {
             e.printStackTrace();
        }
     this.addMouseListener(this);
  }
  
  public void PaintComponent(Graphics g)
  {
     Graphics2D g2d=(Graphics2D)g;
     GradientPaint gp=new GradientPaint
                          (0,0,Color.blue,0,20,Color.cyan,true);
     g2d.setPaint(gp);
     g2d.drawImage(img,0,0,this.getWidth(),
                                                this.getHeight(), this);
      g2d.setColor(Color.black);
      g2d.drawString(this.name,this.getWidth()/2
                   - (this.getWidth()/2/4), (this.getHeight()/2)+5);
  }
  @Override
  public void mouseClicked(MouseEvent event)
  {
     //pas utile d'utiliser cette méthode ici
  }
  
  public void mouseEnterd(MouseEvent event)
  {
        try
           {  
               img=ImageIO.read(new  
                             File("fondBoutonHover.png"));
            }
       catch(IOException e)
           {
                e.printStackTrace();
           }   
    }
  @Override
  public void mouseExited(MouseEvent event)
  {
      try
        {   
            img=ImageIO.read(new File("fondBouton.png"));
        }
      catch(IOException e)
       {
            e.printStackTrace();
       }
  }
  @Override
  public void mousePressed(MouseEvent event)
  {
      try
        {  
           img=ImageIO.read(new File("fondBoutonClic.png"));
        }
     catch(IOException e)
       {
           e.printStackTrace();
       }
 }
 @Override
  public void mouseReleased(MouseEvent event)
  {
         if(event.getY()>0)
         try
            {    
               img=ImageIO.read(new 
                                  File("fondBoutonHover.png"));
            }
         catch(IOException e)
           {
                e.printStackTrace();
           }
  }

 @Override
  public void mouseEntered(MouseEvent arg0) 
  {
     // TODO Auto-generated method stub 
   }
  
   public static void main(String[] args) 
   {
       Fenetre fen=new Fenetre();
   }
 }

5 réponses

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Toujours ton éternel problème : tu essayes d'exécuter un programme qui ne compiles pas !!!
bonsoir
chez moi le prg marche,compile bien
mais quand je clique sur le bouton Go,mon rond s'arrête c'est bizarre non!!!!
Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Il y aura surement un problème une fois que ton programme sera complètement compilé, mais pour l'instant ton programme ne compile pas. Si chez toi ça fonctionne c'est que tu dois avoir d'anciennes versions de tes classes (à un moment où elles compilaient) donc Java mélange les anciennes classes avec les nouvelles ce qui peut donner n'importe quoi !

Effaces les fichiers .class de ton projet et réessaye de compiler, tu verras que cela échoue...
j'ai réussi moité, je clique sur le bouton "Stop" animation s'arrête;
mais le bouton "Go" ne devient pas cliquable
merci de m'aider svp
Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Evidemment que le bouton Go n'est pas cliquable, vu que la classe Bouton2Listener ne compile pas, et pour cause : elle implémente ActionListener, mais ne définit pas la méthode actionPerformed ! Il en est de même avec la classe Fenetre...

Si ton programme fonctionne en l'état c'est grâce à des anciennes versions de tes classes qui ne correspondent plus au code qui est ici, donc fais le ménage, corrige ce qu'il faut, et si nécessaire reviens avec un code complété qui compile !
ça y est,je l'ai corrigé,maintenant ça marche
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JButton; 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Fenetre extends JFrame implements ActionListener
{
   private Panneau pan=new Panneau();	
   private JButton bouton=new JButton("Go");
   private JButton bouton2=new JButton("Stop");
   private JPanel container=new JPanel();
   private JLabel label = new JLabel("Le JLabel");
   private int compteur=0;
   private boolean animated=true;
   private boolean backX, backY;
   private int x,y;
		   
		
  public Fenetre()
   {
     this.setTitle("Animation");
     this.setSize(300,300);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     this.setLocationRelativeTo(null);
     container.setBackground(Color.white);
     container.setLayout(new BorderLayout());
     container.add(pan,BorderLayout.CENTER);
     bouton.addActionListener(new BoutonListener());
     bouton.setEnabled(false);
     bouton2.addActionListener(new Bouton2Listener());
		                
     JPanel south=new JPanel();
     south.add(bouton);
     south.add(bouton2);
     container.add(south,BorderLayout.SOUTH);
			       
     Font police=new Font("Tahoma",Font.BOLD,16);
     label.setFont(police);
     label.setForeground(Color.blue);
		
     label.setHorizontalAlignment(JLabel.CENTER);
     container.add(label,BorderLayout.NORTH);
     this.setContentPane(container);
     this.setVisible(true);
     go ( ); 
  }

 private void go ( )
 {
    int x=pan.getPosX(),y=pan.getPosY();
    while(this.animated)
    {       
        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)
           {
                e.printStackTrace();
           }
     }	
   }

   @Override
    public void actionPerformed(ActionEvent e) 
    {
        throw new UnsupportedOperationException("Not supported yet.");
    }
		     
    /*Class qui écoute notre bouton1 **/
       class BoutonListener implements ActionListener
       {
           /*Redéfinition de la méthode actionPerformed ***/
           public void actionPerformed(ActionEvent arg0)
           {
    	animated=true;
                bouton.setEnabled(false);
	 bouton2.setEnabled(true);
	 go();
           }
       }
	             
      /*Classe qui écoute notre bouton2 **/
          class Bouton2Listener implements ActionListener
         {
             /*Redéfinition de la méthode actionPerformed ***/
                public void actionPerformed(ActionEvent arg0)
                {
                     animated=false;
	     bouton.setEnabled(true);
	     bouton2.setEnabled(false);
                }
        }	          
}

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Remarque : au lieu de mettre un commentaire /*Redéfinition de la méthode actionPerformed ***/ tu peux mettre l'annotation @Override qui est faite exprès pour cela.

Exemple :

class BoutonListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        animated=true;
        bouton.setEnabled(false);
        bouton2.setEnabled(true);
        go();
    }
}
ok
merci beaucoup