import java.awt.*; public class GND extends Component { private Point b; // the other terminal of this component private GNDView gndView; public GND (){ a = new Point(COMPONENT_SIZE, COMPONENT_SIZE); b = new Point(COMPONENT_SIZE, 2*COMPONENT_SIZE); gndView = new GNDView(a,b); } public void paintComponent (Graphics2D g) { gndView.paintComponent(g); } public Boolean isUnderPoint(Point p) { return (gndView.isUnderPoint(p)); } public void rotate(){ Point c=new Point((a.x+b.x)/2,(a.y+b.y)/2); int tem = a.y; a.y=c.y+(a.x-c.x); a.x=c.x-(tem-c.y); tem = b.y; b.y=c.y+(b.x-c.x); b.x=c.x-(tem-c.y); gndView.rotate(); } public void setRed(){ gndView.setRed(); } public void unsetRed(){ gndView.unsetRed(); } public void translate(int dx, int dy){ a.translate(dx,dy); b.translate(dx,dy); gndView.translate(dx,dy); } public Point distance(Component c) {// here Point is a used as a vector double d,min=20000000; // min big enough to ensure change Point t, minVector = new Point(); final Point[] terminals = c.getTerminals(); for (int i = terminals.length-1; i>=0; i--) { t = terminals[i]; d = t.distanceSq(a); if (d < min) { min=d; minVector.setLocation(a.x-t.x,a.y-t.y); } } return minVector; } public Point[] getTerminals () { Point[] t = new Point[1]; t[0]=a; return t; } }