/* La version un peu plus développée de l'applet "maison" qui dessine maintenant des ovales, des rectangles et des lignes... C'est toujours très joli pour les enfants... (C) J. Ferber - Decembre 1999 */ import java.awt.*; import java.applet.Applet; import java.awt.event.*; import java.util.Vector; abstract class Figure extends Object { int x=0; int y=0; int h, l; int couleur; Figure(int l1, int h1){ l=l1; h=h1; } abstract Figure cloneFig(); abstract void dessiner(Graphics g); // la methode abstraite de dessin void setPos(int x1, int y1){ x = x1; y = y1; } void setSize(int l1, int h1){ l = l1; h = h1; } void setColor(int coul){ couleur = coul;} /** pour changer les couleurs */ Color getColor(int c) { switch(c) { case 0: return(Color.black); case 1: return(Color.blue); case 2: return(Color.cyan); case 3: return(Color.darkGray); case 4: return(Color.red); case 5: return(Color.green); case 6: return(Color.lightGray); case 7: return(Color.magenta); case 8: return(Color.orange); case 9: return(Color.gray); case 10: return(Color.pink); case 11: return(Color.yellow); default : return(Color.black); } } } class Rectangle extends Figure { void dessiner(Graphics g){ g.setColor(getColor(couleur)); g.drawRect(x,y,l,h); } Rectangle(int l1, int h1){ super(l1,h1); } Figure cloneFig(){ Figure f=new Rectangle(l,h); return(f); } } class Oval extends Figure { void dessiner(Graphics g){ g.setColor(getColor(couleur)); g.drawOval(x,y,l,h); } Oval(int l1, int h1){ super(l1,h1); } Figure cloneFig(){ Figure f=new Oval(l,h); return(f); } } class Ligne extends Figure { void dessiner(Graphics g){ g.setColor(getColor(couleur)); g.drawLine(x,y,x+l,y+h); } Ligne(int l1, int h1){ super(l1,h1); } Figure cloneFig(){ Figure f=new Ligne(l,h); return(f); } } class FigMaison extends Figure { void dessiner(Graphics g){ g.setColor(getColor(couleur)); g.drawRect(x,y,l,h); g.drawLine(x,y,x+l/2,y-h/2); g.drawLine(x+l/2,y-h/2,x+l,y); g.fillRect(x+3*l/8,y+h/2,l/4,h/2); } FigMaison(int l1, int h1){ super(l1,h1); } Figure cloneFig(){ Figure f=new FigMaison(l,h); return(f); } } public class MaisonApplet2 extends Applet implements MouseListener, ActionListener { final static int BIG_WIDTH = 100; final static int BIG_HEIGHT = 40; final static int SMALL_WIDTH = 40; final static int SMALL_HEIGHT = 20; int larg=SMALL_WIDTH; int haut=SMALL_HEIGHT; int couleur = 0; // la couleur initiale Figure fig; // la figure courante.. Vector figures=new Vector(); // la collection des figures à afficher public void init() { this.addMouseListener(this); setLayout(new BorderLayout()); Panel p = new Panel(); add(p,"North"); Button b1 = new Button("Grand"); Button b2 = new Button("Petit"); Button b3 = new Button("Couleur"); Button b4 = new Button("Clear"); p.add(b1); p.add(b2); p.add(b3); p.add(b4); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); Panel pFig = new Panel(new GridLayout(4,1)); add(pFig,"West"); Button bf1 = new Button("Rectangle"); Button bf2 = new Button("Ovale"); Button bf3 = new Button("Ligne"); Button bf4 = new Button("Maison"); pFig.add(bf1); pFig.add(bf2); pFig.add(bf3); pFig.add(bf4); bf1.addActionListener(this); bf2.addActionListener(this); bf3.addActionListener(this); bf4.addActionListener(this); fig = new Rectangle(larg,haut); } // la gestion des événements public void mousePressed(MouseEvent e) { Figure f; // System.out.println("click: " + e.getX() + ", " + e.getY()); if (fig != null){ f = fig.cloneFig(); f.setPos(e.getX(),e.getY()); f.setColor(couleur); f.dessiner(getGraphics()); figures.addElement(f); } } public void paint(Graphics g){ for(int i=0;i