Applet de dessin + animations

Contenu du snippet

meme code que le precedent "AppletdeDessin.java" seulement cette fois ci avec animations... le code n'est pas optimal; le "thread" continue a 'tourner' meme qd l'animation n'est pas affichee...je n'ai pas su utiliser "synchronized", "notify", "wait()"etc... pour interrompre les animation. j'attends des commentaires la dessus, merci

Source / Exemple :


import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class TestThread extends Applet implements ActionListener, 
                                                        AdjustmentListener, 
                                                        ItemListener,
                                                        Runnable    
{

Panel p1, p2,p21,p22,p23;
Color col;
String color="bleu";
Button b1, b2,b3,bM1,bM2,Anim;
int lineX = 0, l=1, lineY ;   

/************************/

Thread runner = null;        
double t; 
/************************/ 
     
Label lb1;
Checkbox cb1,cb2,cb3;
CheckboxGroup cg = new CheckboxGroup();
Scrollbar sb;
boolean clearFlag = true, oval = false, move1=true, move2=false, Applet1=true;

public void init()

{ 
    
    col = new Color(0,0,255);
    setLayout(new GridLayout(1,2));

//******************** 1er panel p1 ********************
    p1=new linePanel();
    p1.setLayout(new BorderLayout());
    p1.setBackground(Color.pink);
    p1.setForeground(Color.blue);
    sb = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 100);
/*le Scrollbar dessine une ligne dans le panel p1 tout en agissant sur la vitesse des l'animation dans le panel p23*/
    sb.addAdjustmentListener(this); 
    p1.add(sb, BorderLayout.SOUTH);
    sb.setEnabled(false);
    add(p1);
    
/******************** p2 contenant a son tour 3 autres panels********************/

    
    p2=new Panel();
    p2.setLayout(new GridLayout(3,1));
    p2.setBackground(Color.gray);
    p2.setForeground(Color.black);

                 p21=new Panel();
                 p21.setBackground(Color.orange);   
                 p21.setLayout(new BorderLayout());
                 lb1=new Label("couleur choisie:"+color, Label.CENTER); 

                 Choice ch = new Choice();
                 ch.addItem("blanc");
                 ch.addItem("rouge");
                 ch.addItem("gris");
                 ch.addItem("vert");
                 ch.addItem("bleu");
                 ch.addItem("jaune");
                 ch.addItem("orange");
                 ch.select("bleu");

ch.addItemListener(this);
        

p21. add(ch,"North");   //Ajout de composant    
p21.add(lb1);   
p2.add(p21);

                        p22=new Panel();
                p22.setLayout(new BorderLayout());
                p22.setBackground(Color.gray);  
                p22.setForeground(Color.black);     
            
                cb1 = new Checkbox(" Checkbox 1",cg,true);              
                cb1.addItemListener(this);
                cb2 = new Checkbox(" Checkbox 2",cg,false); 
                cb2.addItemListener(this);
                cb3 = new Checkbox(" Checkbox 3",cg,false);    
                cb3.addItemListener(this);

                 
                b1 = new Button("Dessins");
                b1.addActionListener(this); 
                        
                b2 = new Button("Pas de Dessins");
                b2.addActionListener(this);
                b2.setEnabled(false);
                
                bM1 = new Button("anim1");
                bM1.addActionListener(this);   
                bM1.setEnabled(true);
                bM2 = new Button("anim2");
                bM2.addActionListener(this);   
                bM2.setEnabled(true); 
                Anim = new Button("Applet2");
             Anim.addActionListener(this);   
                Anim.setEnabled(true); 
                     
                       Panel N=new Panel(); 
                       Panel C=new Panel();               
                       Panel E=new Panel();               
                      N.setLayout(new GridLayout(1,2));
                      C.setLayout(new GridLayout(3,1));
                      C.setForeground(Color.black); 
                      E.setLayout(new GridLayout(3,1));
                      E.setForeground(Color.black); 
                                    N.add(b1);
                                    N.add(b2);
                                    C.add(cb1);
                                    C.add(cb2); 
                                    C.add(cb3);                    
                                   
  E.add(bM1);
  E.add(bM2);
  E.add(Anim);                                                                                        
  p22.add(N, BorderLayout.NORTH);   //B
  p22.add(C, BorderLayout.CENTER); 
  p22.add(E,BorderLayout.EAST);
  
p2.add(p22);      

                p23=new ovalPanel();
                p23.setLayout(new BorderLayout());
                p23.setBackground(Color.black);
                p23.setForeground(Color.blue);
                b3 = new Button("cercle");
                b3.addActionListener(this); 
                p23.add(b3, BorderLayout.WEST);
                b3.setForeground(Color.black);
                b3.setEnabled(false);
p2.add(p23); 
    
add(p2);

}//init()

/*********************************/

public void start()     
  { if (runner == null)    
    {  runner = new Thread(this);  
       runner.start();}}  

  public void stop()
 { if (runner != null)  runner = null;}

  public void run()
  { while (true)       
    { try              
       { int s=60-(int)(lineX/5);
         p23.repaint();    
         Thread.sleep(s);}  
      catch (InterruptedException e)
      { stop();}}}  

/*********************************/

public void adjustmentValueChanged(AdjustmentEvent e)
{ lineY=p1.getSize().height/2;
    if(sb == (Scrollbar)e.getSource())
    lineX = e.getValue()*p1.getSize().width/sb.getMaximum(); 
    p1.repaint();   
}

         public void itemStateChanged(ItemEvent e) 
     {
        String acm = (String)e.getItem();
        if("blanc".equals(acm))     {col = Color.white;
                                        color= " blanc";}
        else if("rouge".equals(acm)) {col = Color.red;
                                        color= " rouge"; }  
        else if("gris".equals(acm)) {col = Color.gray;
                                        color= " gris"; }       
        else if("vert".equals(acm)) {col = Color.green;
                                        color= " vert"; }        
        else if("bleu".equals(acm))  {col = Color.blue; 
                                        color= " bleu"; }        
        else if("jaune".equals(acm))    {col = Color.yellow;
                                        color= " jaune"; }
        else if("orange".equals(acm))   {col = Color.orange;
                                        color= " orange"; }
            
                 
        else if (cg.getSelectedCheckbox() == cb1) {cb1.setEnabled(true);l=1;}
        else if (cg.getSelectedCheckbox() == cb2) {cb2.setEnabled(true);l=3;}
        else if (cg.getSelectedCheckbox() == cb3) {cb3.setEnabled(true);l=5;}
        
        p1.setForeground(col);
        p23.setForeground(col);
        lb1.setText("couleur choisie:"+color);
        if(!clearFlag) {p1.repaint();p23.repaint();}
     
        }

public void actionPerformed(ActionEvent e)
{
   String acm = e.getActionCommand();
  if("Dessins".equals(acm)) 
     clearFlag = false;

  if("Pas de Dessins".equals(acm))
      clearFlag = true;
  if("anim1".equals(acm)) 
       {  move1 = true; 
          move2=false;}
  if("anim2".equals(acm)) 
      { move2 = true;
        move1=false;}
 if("Applet2".equals(acm)) 
    { Applet1 = !Applet1;
       Anim.setLabel("Applet1");}
 if("Applet1".equals(acm)) 
    { Applet1 = !Applet1;
       Anim.setLabel("Applet2");}   
  if("cercle".equals(acm)) 
      oval = !oval; 

   b1.setEnabled(clearFlag);
   b2.setEnabled(!clearFlag);  
   b3.setEnabled(!clearFlag);
   bM1.setEnabled(!Applet1 && move2); 
   bM2.setEnabled(!Applet1 && move1);  
   sb.setEnabled(!clearFlag);
   
   p1.repaint();
   p23.repaint(); 
}

class linePanel extends Panel
     { 
     public void paint(Graphics g)
            {if(!clearFlag) 
                 {for(int i=1;i<=l;i++) g.drawLine(0,lineY+i,lineX,lineY+i);
                //if(l==1) g.drawLine(0,lineY,lineX,lineY);
                //   else   g.fillRect(0,lineY,lineX,l);                 
                 }}
    }   

class ovalPanel extends Panel
     {  public void paint(Graphics g)
         {
           int h=p23.getSize().height;
           int w=p23.getSize().width;
           int x=b3.getSize().width;
           if(!clearFlag && oval) 
                              {   if(Applet1)
                                      {g.drawOval(p23.getSize().width/2-p23.getSize().height/4, p23.getSize().height/4,
                                        p23.getSize().height/2,p23.getSize().height/2);}
                                  else if(!Applet1 && move1)
                                      { t+=0.05;    
                                        g.drawOval(x+(int)((w-(x+h/2))/2*(1+Math.sin(t))), (int)(h/4*(1+Math.cos(t))),(int)(h/2),(int)(h/2)); }
                                                            
                                  else if(!Applet1 && move2)
                                      {t+=0.05; g.drawOval(x+(int)((w-(x+h/2))/2*(1+Math.sin(t))), (int)(h/4*(1+Math.cos(4*t))),(int)(h/2),(int)(h/2)); } 
                }
    }   

}

}//TestThread

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.