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
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
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); }
Merci pour votre aide
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) ); } }
Partager