public class CircleNode implements Node
1: import java.awt.*;
2: import java.awt.geom.*;
4: /**
5: A circular node that is filled with a color.
6: */
7: public class CircleNode implements Node
8: {
9: /**
10: Construct a circle node with a given size and color.
11: @param aColor the fill color
12: */
13: public CircleNode(Color aColor)
14: {
15: size = DEFAULT_SIZE;
16: x = 0;
17: y = 0;
18: color = aColor;
19: }
21: public void setColor(Color aColor)
22: {
23: color = aColor;
24: }
26: public Color getColor()
27: {
28: return color;
29: }
31: public Object clone()
32: {
33: try
34: {
35: return super.clone();
36: }
37: catch (CloneNotSupportedException exception)
38: {
39: return null;
40: }
41: }
43: public void draw(Graphics2D g2)
44: {
45: Ellipse2D circle = new Ellipse2D.Double(
46: x, y, size, size);
47: Color oldColor = g2.getColor();
48: g2.setColor(color);
49: g2.fill(circle);
50: g2.setColor(oldColor);
51: g2.draw(circle);
52: }
54: public void translate(double dx, double dy)
55: {
56: x += dx;
57: y += dy;
58: }
60: public boolean contains(Point2D p)
61: {
62: Ellipse2D circle = new Ellipse2D.Double(
63: x, y, size, size);
64: return circle.contains(p);
65: }
67: public Rectangle2D getBounds()
68: {
69: return new Rectangle2D.Double(
70: x, y, size, size);
71: }
73: public Point2D getConnectionPoint(Point2D other)
74: {
75: double centerX = x + size / 2;
76: double centerY = y + size / 2;
77: double dx = other.getX() - centerX;
78: double dy = other.getY() - centerY;
79: double distance = Math.sqrt(dx * dx + dy * dy);
80: if (distance == 0) return other;
81: else return new Point2D.Double(
82: centerX + dx * (size / 2) / distance,
83: centerY + dy * (size / 2) / distance);
84: }
86: private double x;
87: private double y;
88: private double size;
89: private Color color;
90: private static final int DEFAULT_SIZE = 20;
91: }