1 import java.awt.*;
2 import java.awt.event.*;
3 import java.awt.geom.*;
4 import javax.swing.*;
5
6 import java.util.*;
7
8 /**
9
10 */
11 public class SceneComponent extends JComponent
12 {
13 public SceneComponent()
14 {
15 shapes = new ArrayList<>();
16 addMouseListener(new MousePressedListener());
17 addMouseMotionListener(new MouseDraggedListener());
18 }
19
20 private class MousePressedListener extends MouseAdapter
21 {
22 @Override
23 public void mousePressed(MouseEvent event)
24 {
25 mousePoint = event.getPoint();
26 for (SceneShape s : shapes)
27 {
28 if (s.contains(mousePoint))
29 s.setSelected(!s.isSelected());
30 }
31 repaint();
32 }
33 }
34
35 private class MouseDraggedListener extends MouseAdapter
36 {
37 @Override
38 public void mouseDragged(MouseEvent event)
39 {
40 Point lastMousePoint = mousePoint;
41 mousePoint = event.getPoint();
42 for (SceneShape s : shapes)
43 {
44 if (s.isSelected())
45 {
46 double dx = mousePoint.getX() - lastMousePoint.getX();
47 double dy = mousePoint.getY() - lastMousePoint.getY();
48 s.translate((int) dx, (int) dy);
49 }
50 }
51 repaint();
52 }
53 }
54
55 /**
56
57 @param s
58 */
59 public void add(SceneShape s)
60 {
61 shapes.add(s);
62 repaint();
63 }
64
65 /**
66
67 */
68 public void removeSelected()
69 {
70 for (int i = shapes.size() - 1; i >= 0; i--)
71 {
72 SceneShape s = shapes.get(i);
73 if (s.isSelected()) shapes.remove(i);
74 }
75 repaint();
76 }
77
78 public void paintComponent(Graphics g)
79 {
80 Graphics2D g2 = (Graphics2D) g;
81 for (SceneShape s : shapes)
82 {
83 s.draw(g2);
84 if (s.isSelected())
85 s.drawSelection(g2);
86 }
87 }
88
89 private ArrayList<SceneShape> shapes;
90 private Point mousePoint;
91 }