01: import java.awt.*;
02: import java.awt.event.*;
03: import java.awt.geom.*;
04: import javax.swing.*;
05: import java.util.*;
06:
07: /**
08: A panel that shows a scene composed of shapes.
09: */
10: public class ScenePanel extends JPanel
11: {
12: public ScenePanel()
13: {
14: shapes = new ArrayList();
15:
16: addMouseListener(new
17: MouseAdapter()
18: {
19: public void mousePressed(MouseEvent event)
20: {
21: mousePoint = event.getPoint();
22: for (int i = 0; i < shapes.size(); i++)
23: {
24: SceneShape s = (SceneShape) shapes.get(i);
25: if (s.contains(mousePoint))
26: s.setSelected(!s.isSelected());
27: }
28: repaint();
29: }
30: });
31:
32: addMouseMotionListener(new
33: MouseMotionAdapter()
34: {
35: public void mouseDragged(MouseEvent event)
36: {
37: Point lastMousePoint = mousePoint;
38: mousePoint = event.getPoint();
39: for (int i = 0; i < shapes.size(); i++)
40: {
41: SceneShape s = (SceneShape) shapes.get(i);
42: if (s.isSelected())
43: s.translate(
44: mousePoint.getX() - lastMousePoint.getX(),
45: mousePoint.getY() - lastMousePoint.getY());
46: }
47: repaint();
48: }
49: });
50: }
51:
52: /**
53: Adds a shape to the scene.
54: @param s the shape to add
55: */
56: public void add(SceneShape s)
57: {
58: shapes.add(s);
59: repaint();
60: }
61:
62: /**
63: Removes all selected shapes from the scene.
64: */
65: public void removeSelected()
66: {
67: for (int i = shapes.size() - 1; i >= 0; i--)
68: {
69: SceneShape s = (SceneShape) shapes.get(i);
70: if (s.isSelected()) shapes.remove(i);
71: }
72: repaint();
73: }
74:
75: public void paintComponent(Graphics g)
76: {
77: super.paintComponent(g);
78: Graphics2D g2 = (Graphics2D) g;
79: for (int i = 0; i < shapes.size(); i++)
80: {
81: SceneShape s = (SceneShape) shapes.get(i);
82: s.draw(g2);
83: if (s.isSelected())
84: s.drawSelection(g2);
85: }
86: }
87:
88: private ArrayList shapes;
89: private Point mousePoint;
90: }