-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCanvas.java
115 lines (95 loc) · 3.13 KB
/
Canvas.java
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.awt.*;
import java.util.concurrent.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ListIterator;
import javax.swing.JApplet;
import javax.swing.JFrame;
public class Canvas extends JApplet {
private int height;
private int width;
private CopyOnWriteArrayList<Circle> circles;
private CopyOnWriteArrayList<Triangle> triangles;
private CopyOnWriteArrayList<Rectangle> rectangles;
public Canvas() {
JFrame f = new JFrame("Canvas");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {System.exit(0);}
});
height = 800;
width = 800;
f.setSize(width, height);
f.getContentPane().add(this);
circles = new CopyOnWriteArrayList<Circle>();
rectangles = new CopyOnWriteArrayList<Rectangle>();
triangles = new CopyOnWriteArrayList<Triangle>();
f.setVisible(true);
}
public Canvas(int h, int w) {
JFrame f = new JFrame("Canvas");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {System.exit(0);}
});
height = h;
width = w;
f.setSize(width, height);
f.getContentPane().add(this);
circles = new CopyOnWriteArrayList<Circle>();
rectangles = new CopyOnWriteArrayList<Rectangle>();
triangles = new CopyOnWriteArrayList<Triangle>();
f.setVisible(true);
}
public void paint(Graphics g) {
Image buffer = createImage(width,height);
drawToBuffer(buffer.getGraphics());
g.drawImage(buffer,0,0,null);
}
public void drawToBuffer(Graphics g){
ListIterator<Circle> circItr = circles.listIterator();
ListIterator<Rectangle> recItr = rectangles.listIterator();
ListIterator<Triangle> triItr = triangles.listIterator();
while (circItr.hasNext()) {
Circle curCircle = circItr.next();
g.setColor(curCircle.getColor());
int curRadius = (int)curCircle.getRadius();
g.fillOval((int)curCircle.getXPos() - curRadius, (int)curCircle.getYPos()
- curRadius, 2 * curRadius, 2 * curRadius);
}
while (recItr.hasNext()) {
Rectangle curRectangle = recItr.next();
g.setColor(curRectangle.getColor());
g.fillRect((int)curRectangle.getXPos(), (int)curRectangle.getYPos(),
(int)curRectangle.getWidth(), (int)curRectangle.getHeight());
}
while (triItr.hasNext()) {
Triangle curTriangle = triItr.next();
g.setColor(curTriangle.getColor());
Polygon po = new Polygon();
po.addPoint((int)curTriangle.getXPos(), (int)curTriangle.getYPos());
po.addPoint((int)(curTriangle.getXPos() + curTriangle.getWidth()), (int)curTriangle
.getYPos());
po.addPoint((int)(curTriangle.getXPos() + curTriangle.getWidth() / 2), (int)(curTriangle.getYPos() - curTriangle.getHeight()));
g.fillPolygon(po);
}
}
public void drawShape(Circle circ){
circles.add(circ);
}
public void drawShape(Rectangle rec){
rectangles.add(rec);
}
public void drawShape(Triangle tri){
triangles.add(tri);
}
public void clear(){
circles.clear();
rectangles.clear();
triangles.clear();
}
public static void main(String[] args) {
Canvas canvas = new Canvas(800, 800);
Circle myCircle = new Circle(400, 400, 100);
myCircle.setColor(Color.BLUE);
canvas.drawShape(myCircle);
}
}