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: }