La classe Canvas fournit un point de départ intéressant pour créer de nouveaux composants.
Notre composant devra dessiner 20 carrés en choisissant au hasard position, taille et couleur. Il devra en outre réagir à l'évènement de type ActionEvent appelé "Changer".
Le composant étend la classe Canvas. Positions, tailles et couleurs des carrés seront stockées dans des tableaux. Un champ booléen nommé nouveau nous indiquera si ces tableaux doivent être calculés.
import java.awt.*; import java.awt.event.*; public class LeDessin extends Canvas implements ActionListener { static int nbcarres=20; //pour tracer les 20 carres int x[]=new int[nbcarres]; int y[]=new int[nbcarres]; int c[]=new int[nbcarres]; Color col[]= new Color[nbcarres]; //drapeau indiquant qu'il faut tout calculer boolean nouveau; /** * Constructeur */ public LeDessin() { nouveau=true; setBackground(Color.white); }
Nous créons une méthode nommée recalc dont le but est de remplir les tableaux de données lorsque c'est nécessaire. Cette méthode utilisera la méthode hasard(int n) qui renvoie un entier au hasard entre 0 et n.
int hasard(int n) { return (int)Math.floor(Math.random()*n); } public void recalc() { //maximum pour coordonnées et côté int maxi=Math.min(getSize().width/2, getSize().height/2); for (int i=0; i<nbcarres; i++) { col[i]=new Color(hasard(256),hasard(256), hasard(256)); //coordonnées x[i]=hasard(maxi); y[i]=hasard(maxi); //côté c[i]=hasard(maxi); } //indiquer que le calcul est effectué nouveau=false; }
Cette méthode teste le champ nouveau pour calculer les carrés si nécessaire, puis affiche les carrés.
public void paint(Graphics g) { if (nouveau) recalc(); for (int i=0; i<nbcarres; i++) { g.setColor(col[i]); g.fillRect(x[i],y[i],c[i],c[i]); } }
Cette méthode réagit à l'évènement de type ActionEvent nommé "Changer" en mettant le champ nouveau à false pour forcer un nouveau calcul des carrés et en appelant la méthode repaint.
public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Changer")) { nouveau=true; repaint(); } }
Notre nouveau composant est près. Ses autres méthodes sont celles qu'il hérite du composant Canvas.
Notre applet contiendra un bouton "Changer" et le composant que nous venons de créer. Il suffira d'écrire sa méthode init et d'indiquer que notre composant est l'écouteur associé au bouton.
import java.awt.*; import java.awt.event.*; import java.applet.*; public class Carres extends Applet { public void init() { setLayout(new BorderLayout()); LeDessin d=new LeDessin(); add("Center",d); Button b=new Button("Changer"); b.addActionListener(d); add("South",b); } }
Il ne reste plus qu'à écrire le fichier html associé et à tester l' applet.