public class SceneComponent extends JComponent
1: import java.awt.*;
2: import java.awt.event.*;
3: import java.awt.geom.*;
4: import javax.swing.*;
5: import java.util.*;
7: /**
8: A component that shows a scene composed of shapes.
9: */
10: public class SceneComponent extends JComponent
11: {
12: public SceneComponent()
13: {
14: shapes = new ArrayList<SceneShape>();
16: addMouseListener(new
17: MouseAdapter()
18: {
19: public void mousePressed(MouseEvent event)
20: {
21: mousePoint = event.getPoint();
22: for (SceneShape s : shapes)
23: {
24: if (s.contains(mousePoint))
25: s.setSelected(!s.isSelected());
26: }
27: repaint();
28: }
29: });
31: addMouseMotionListener(new
32: MouseMotionAdapter()
33: {
34: public void mouseDragged(MouseEvent event)
35: {
36: Point lastMousePoint = mousePoint;
37: mousePoint = event.getPoint();
38: for (SceneShape s : shapes)
39: {
40: if (s.isSelected())
41: {
42: double dx = mousePoint.getX() - lastMousePoint.getX();
43: double dy = mousePoint.getY() - lastMousePoint.getY();
44: s.translate((int) dx, (int) dy);
45: }
46: }
47: repaint();
48: }
49: });
50: }
52: /**
53: Adds an 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: }
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 = shapes.get(i);
70: if (s.isSelected()) shapes.remove(i);
71: }
72: repaint();
73: }
75: public void paintComponent(Graphics g)
76: {
77: super.paintComponent(g);
78: Graphics2D g2 = (Graphics2D) g;
79: for (SceneShape s : shapes)
80: {
81: s.draw(g2);
82: if (s.isSelected())
83: s.drawSelection(g2);
84: }
85: }
87: private ArrayList<SceneShape> shapes;
88: private Point mousePoint;
89: }