Bonjour,

Je suis tout nouveau en java et je d�bute l'interface SWT depuis une semaine, et notre formateur nous demande de pouvoir dessiner des cercles � la vol�e dans un composant Canvas afin de reproduire de fa�on tr�s tr�s modeste les principes d'un logiciel de type Paint.

En cours nous avons utilis� le plugin org.eclipse.swt.graphics.Rectangle pour tracer des rectangles mais je ne sais pas comment m'y prendre pour les cercles

Voici ce que nous avons fait en cours pour cr�er un rectangle :

Nous avons d�fini une classe abstraite avec les crit�res communs � toutes les formes, puis nous avons �tendu cette classe avec une classe rectangle. Ensuite, dans une classe Canvas, nous avons utilis� l'interface MouseListener et PaintListener pour pouvoir dessiner les rectangles � la souris. J'aurais voulu r�ussir � faire une classe Cercle qui reprenne la logique de ma classe rectangle. Jen e vois pas trop comment aborder le probl�me

La classe abstraite
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package paintrcp.biz;
 
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
 
 
public abstract class Shape {
	private String name;
	private RGB border = new RGB(0,0,0);
	private RGB fill = new RGB(255,255,255);
 
	public Shape(String name, Point begin, Point end, RGB border, RGB fill) {
		setName(name);
		setBounds(begin, end);
		setBorder(border);
		setFill(fill);	
	}
 
	public RGB getBorder() {
		return border;
	}
 
	public void setBorder(RGB border) {
		Colors.copy(this.border, border);
	}
 
	public RGB getFill() {
		return fill;
	}
 
	public void setFill(RGB fill) {
		Colors.copy(this.fill, fill);
	}
 
	public String getName() {
		return this.name;
	}
 
	public void setName(String name) {
		if(name.length()<2) {
			throw new IllegalArgumentException("Name must have at least 2 characters");
		}
		this.name=name;
	}
 
	public void setBounds(Point begin, Point end) {
		if(begin==null || end==null) {
			throw new NullPointerException("begin and end cannot be null");
		}
		if(begin.equals(end)) {
			throw new IllegalArgumentException("begin and end must be different");
		}
	}
 
	public abstract void draw(GC gc);
}
La classe m�tier Rectangle
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package paintrcp.biz;
 
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
 
public class Rectangle extends Shape {
 
private org.eclipse.swt.graphics.Rectangle rect;
 
	public Rectangle(String name, Point begin, Point end, RGB border, RGB fill) {
		super(name, begin, end, border, fill);
	}
 
	@Override
	public void draw(GC gc) {
		gc.setBackground(new Color(gc.getDevice(), getFill()));
		gc.setForeground(new Color(gc.getDevice(), getBorder()));
		gc.fillRectangle(rect);
		gc.drawRectangle(rect);
	}
 
	@Override
	public void setBounds(Point begin, Point end) {
		super.setBounds(begin, end);
		rect = new org.eclipse.swt.graphics.Rectangle(
				Math.min(begin.x,end.x),
				Math.min(begin.y, end.y),
				Math.abs(begin. x-end.x),
				Math.abs(begin. y-end.y)
			);
	}
}
Merci pour votre aide