Applet de dessin + animations

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 331 fois - Téléchargée 28 fois

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

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
25 mai 2007

merciii
Messages postés
15
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
20 avril 2006

Bonjour,

J'ai testé cette applet (applette) et je ne sais quels conseils donner sinon chercher dans du code java qui prétend fonctionner !

Le mien, sur mon site contient (excuse pour les repliements de lignes...) :

// ------------------------- //
public void start() {
// ------------------------- //
if (threadActif == null) {
threadActif = new Thread(this);
threadActif.start();
}
} // start()

// ------------------------- //
public void stop()
// ------------------------- //
{
if (threadActif != null) {
threadActif = null;
}
}

// ------------------------- //
public void run() {
// ------------------------- //
Thread thisThread = Thread.currentThread();
while (threadActif == thisThread) {
showStatus(getAppletInfo()); // "Copyright"
switch(etatApplette) {
case 5 : // début, dessin animé vide
etatApplette = 10 ;
break;

case 10 : // réalisation d'une nouvelle séquence animée

ETC...ETC... GESTION DES ETATS DE L'APPLETTE...

repaint();
try {
Thread.sleep(tempsCadencement);
} // try ( plus rapide, on peut désynchroniser paint() )
catch (InterruptedException e) { }

} // while (threadActif == thisThread)

} // run()


J'espère que cela pourra aider ...

================================
Mon site : http://perso.wanadoo.fr/alain.reverse

Voir pour les codes-source :

http://perso.wanadoo.fr/alain.reverse/html/InfoDessinAnime.htm . Wanadoo semble m'avoir bloqué l'accès général au répertoire des sources... Mais on accède quand même au principal.

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.