Dessiner en java v2

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 573 fois - Téléchargée 27 fois

Contenu du snippet

Applet pour dessiner des figures de base avec des couleurs de bases.

Source / Exemple :


import java.applet.*;
import java.awt.*;
import java.util.Vector;

abstract class Forme {
	abstract void dessiner(Graphics g);
}

class Dessin {
	Graphics g;
	Vector listeFormes;
	Dessin(Graphics gc) {
		g = gc;
		listeFormes = new Vector();
	}
	
	void ajoute(Forme f) {
		listeFormes.addElement(f);
	}
	
	void dessiner() {
		int n = listeFormes.size();
		Forme f;
		for(int i=0; i<n; i++) {
			f = (Forme) listeFormes.elementAt(i);
			f.dessiner(g);
		}
	}
	
	void effacer() {
		listeFormes.removeAllElements();
	}
}

class Point {
	int x;
	int y;
	
	Point(int x1, int y1) {
		x = x1;
		y = y1;
	}
}

class Trace extends Forme {
	Color couleur;
	Vector listePoints;
	
	Trace(Color c) {
		couleur = c;
		listePoints = new Vector();
	}
	
	void ajoute(Point p) {
		listePoints.addElement(p);
	}
	
	void ajoute(int x, int y) {
		ajoute(new Point(x,y));
	}
	
	Point nieme(int n) {
		if (listePoints.capacity() < n) return null;
		return (Point) listePoints.elementAt(n);
	}
	
	int nbPoints() {
		return listePoints.size();
	}
	
	void dessiner(Graphics g) {
		int n = nbPoints();
		if(n<=1) return;
		
		g.setColor(couleur);
		int x_precedent = nieme(0).x;
		int y_precedent = nieme(0).y;
		
		int x,y;
		
		for(int i=1; i<n; i++) {
			x = nieme(i).x;
			y = nieme(i).y;
			g.drawLine(x_precedent, y_precedent, x, y);
			x_precedent = x;
			y_precedent = y;
		}
	}
}

class Cercle extends Forme {
	Color couleur;
	Point centre;
	int rayon;
	
	Cercle(Color c, int x, int y, int r) {
		couleur = c;
		centre = new Point(x,y);
		rayon = r;
	}
	
	Cercle(Color c, int xc, int yc, int x, int y) {
		couleur = c;
		centre = new Point(xc,yc);
		rayon = (int) Math.sqrt((x-xc)*(x-xc)+(y-yc)*(y-yc));
	}
	
	void dessiner(Graphics g) {
		g.setColor(couleur);
		g.drawOval(centre.x-rayon, centre.y-rayon, 2*rayon, 2*rayon);
	}
}

class Rect extends Forme {
	Color couleur;
	Point p1, p2;
	Rect(Color c, int x1, int y1, int x2, int y2) {
		couleur = c;
		p1 = new Point(x1, y1);
		p2 = new Point(x2, y2);
	}
	
	void dessiner(Graphics g) {
		int x, y, largeur, hauteur;
		
		g.setColor(couleur);
		x = Math.min(p1.x, p2.x);
		y = Math.min(p1.y, p2.y);
		largeur = Math.abs(p1.x - p2.x);
		hauteur = Math.abs(p1.y - p2.y);
		
		g.drawRect(x, y, largeur, hauteur);
	}
}

public class DessinerV2 extends Applet {
		private Dessin dessin;
		private Trace tr;
		
		private int x_precedent;
		private int y_precedent;
		private boolean gomme;
		private String figure;
		private Color couleur_courrante;
		private Button bouton_effacer;
		private Choice bouton_figure;
		private Choice bouton_couleur;
		private Choice taille_gomme;
		private String taille;
	
	public void init() {
		dessin = new Dessin(getGraphics());
		
		this.setBackground(Color.white);
		
		gomme = false;
		figure = "trace";
		couleur_courrante = Color.black;
		
		bouton_effacer = new Button("Effacer");
		bouton_effacer.setForeground(Color.black);
		bouton_effacer.setBackground(Color.lightGray);
		this.add(bouton_effacer);
		
		bouton_couleur = new Choice();
		bouton_couleur.addItem("noir");
		bouton_couleur.addItem("rouge");
		bouton_couleur.addItem("jaune");
		bouton_couleur.addItem("vert");		
		bouton_couleur.addItem("bleu");
		bouton_couleur.addItem("cyan");
		bouton_couleur.addItem("gris foncé");
		bouton_couleur.addItem("gris");
		bouton_couleur.addItem("gris clair");
		bouton_couleur.addItem("violet");
		bouton_couleur.addItem("orange");
		bouton_couleur.addItem("rose");
		bouton_couleur.addItem("blanc");
		bouton_couleur.addItem("GOMME");
		bouton_couleur.setForeground(Color.black);
		bouton_couleur.setBackground(Color.lightGray);
		this.add(new Label("    Couleur :"));
		this.add(bouton_couleur);
		
		bouton_figure = new Choice();
		bouton_figure.addItem("trace");
		bouton_figure.addItem("rectangle");
		bouton_figure.addItem("cercle");
		bouton_figure.addItem("rectangle plein");
		bouton_figure.addItem("cercle plein");		
		bouton_figure.setBackground(Color.lightGray);
		this.add(bouton_figure);
		
		taille_gomme = new Choice();
		taille_gomme.addItem("1");		
		taille_gomme.addItem("2");
		taille_gomme.addItem("5");
		taille_gomme.addItem("10");
		taille_gomme.addItem("25");
		taille_gomme.addItem("50");
		taille_gomme.setBackground(Color.lightGray);
		this.add(new Label("     Taille gomme :"));
		this.add(taille_gomme);
	}
	
	public void paint(Graphics gc) {
		dessin.dessiner();
	}
	
	public boolean mouseDown(Event e, int x, int y) {
		if(figure.equals("trace")) {
			tr = new Trace(couleur_courrante);
			tr.ajoute(x, y);
		}
		
		x_precedent = x;
		y_precedent = y;
		return true;
	}
	
	public boolean mouseDrag(Event e, int x, int y) {
		Graphics g = this.getGraphics();
		
		if(gomme) {
			if(taille.equals("1")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x, y));
			}
			
			else if(taille.equals("2")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x+1, y+1));
			}
			
			else if(taille.equals("5")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x+4, y+4));
			}
			
			else if(taille.equals("10")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x+9, y+9));
			}

			else if(taille.equals("25")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x+24, y+24));
			}
			
			else if(taille.equals("50")) {
			dessin.ajoute(new Rect(getBackground(), x, y, x+49, y+49));
			}			
			g.setColor(this.getBackground());
			g.fillRect(x, y, 5, 5);
		}
		
		else if(figure.equals("trace")) {
			tr.ajoute(x, y);
			g.setColor(couleur_courrante);
			g.drawLine(x_precedent, y_precedent, x, y);
			x_precedent = x;
			y_precedent = y;
		}
		
		return true;
	}
	
	public boolean mouseUp(Event e, int x, int y) {
		if(gomme) return true;
		
		Graphics g = this.getGraphics();
		g.setColor(couleur_courrante);
		
		if(figure.equals("rectangle")) {
			dessin.ajoute(new Rect(couleur_courrante, x_precedent, y_precedent, x, y));
			g.drawRect(Math.min(x_precedent, x), Math.min(y_precedent, y), Math.abs(x - x_precedent), Math.abs(y - y_precedent));
		}
		
		else if(figure.equals("cercle")) {
			dessin.ajoute(new Cercle(couleur_courrante, x_precedent, y_precedent, x, y));
			
			int rayon = (int) Math.sqrt((x - x_precedent)*(x - x_precedent)+(y - y_precedent)*(y - y_precedent));
			g.drawOval(x_precedent - rayon, y_precedent - rayon, 2*rayon, 2*rayon);
		}
		
		else if(figure.equals("rectangle plein")) {
			dessin.ajoute(new Rect(couleur_courrante, x_precedent, y_precedent, x, y));
			g.fillRect(Math.min(x_precedent, x), Math.min(y_precedent, y), Math.abs(x - x_precedent), Math.abs(y - y_precedent));
		}
		
		else if(figure.equals("cercle plein")) {
			dessin.ajoute(new Cercle(couleur_courrante, x_precedent, y_precedent, x, y));
			
			int rayon = (int) Math.sqrt((x - x_precedent)*(x - x_precedent)+(y - y_precedent)*(y - y_precedent));
			g.fillOval(x_precedent - rayon, y_precedent - rayon, 2*rayon, 2*rayon);
		}
				
		else if(figure.equals("trace")) {
			dessin.ajoute(tr);
		}
		
		return true;
	}
	
	public boolean action(Event event, Object arg) {
		if(event.target == bouton_effacer) {
			dessin.effacer();
			Graphics g = this.getGraphics();
			Rectangle r = this.bounds();
			g.setColor(this.getBackground());
			g.fillRect(r.x, r.y, r.width, r.height);
			return true;
		}
		
		else if (event.target == bouton_couleur) {
			gomme = false;
			
			if(arg.equals("noir")) couleur_courrante = Color.black;
			else if(arg.equals("rouge")) couleur_courrante = Color.red;			
			else if(arg.equals("jaune")) couleur_courrante = Color.yellow;
			else if(arg.equals("vert")) couleur_courrante = Color.green;
			else if(arg.equals("bleu")) couleur_courrante = Color.blue;
			else if(arg.equals("cyan")) couleur_courrante = Color.cyan;
			else if(arg.equals("gris foncé")) couleur_courrante = Color.darkGray;
			else if(arg.equals("gris")) couleur_courrante = Color.gray;
			else if(arg.equals("gris clair")) couleur_courrante = Color.lightGray;
			else if(arg.equals("violet")) couleur_courrante = Color.magenta;
			else if(arg.equals("orange")) couleur_courrante = Color.orange;
			else if(arg.equals("rose")) couleur_courrante = Color.pink;
			else if(arg.equals("blanc")) couleur_courrante = Color.white;			
			else if(arg.equals("GOMME")) gomme = true;
			
			return true;
		}
		
		else if(event.target == bouton_figure) {
			figure = (String) arg;
			return true;
		}
		
		else if(event.target == taille_gomme) {
			taille = (String) arg;
			return true;
		}
		
		else return super.action(event, arg);
	}
}

Conclusion :


Bientôt on poura enregistrer les dessin en JPG.
L'option taille de la gomme ne marche pas.

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de Utilisateur anonyme

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.