Source for java.awt.Point

   1: /* Point.java -- represents a point in 2-D space
   2:    Copyright (C) 1999, 2002, 2006 Free Software Foundation
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: 
  39: package java.awt;
  40: 
  41: import java.awt.geom.Point2D;
  42: import java.io.Serializable;
  43: 
  44: /**
  45:  * This class represents a point on the screen using cartesian coordinates.
  46:  * Remember that in screen coordinates, increasing x values go from left to
  47:  * right, and increasing y values go from top to bottom.
  48:  *
  49:  * <p>There are some public fields; if you mess with them in an inconsistent
  50:  * manner, it is your own fault when you get invalid results. Also, this
  51:  * class is not threadsafe.
  52:  *
  53:  * @author Per Bothner (bothner@cygnus.com)
  54:  * @author Aaron M. Renn (arenn@urbanophile.com)
  55:  * @author Eric Blake (ebb9@email.byu.edu)
  56:  * @since 1.0
  57:  * @status updated to 1.4
  58:  */
  59: public class Point extends Point2D implements Serializable
  60: {
  61:   /**
  62:    * Compatible with JDK 1.0+.
  63:    */
  64:   private static final long serialVersionUID = -5276940640259749850L;
  65: 
  66:   /**
  67:    * The x coordinate.
  68:    *
  69:    * @see #getLocation()
  70:    * @see #move(int, int)
  71:    * @serial the X coordinate of the point
  72:    */
  73:   public int x;
  74: 
  75:   /**
  76:    * The y coordinate.
  77:    *
  78:    * @see #getLocation()
  79:    * @see #move(int, int)
  80:    * @serial The Y coordinate of the point
  81:    */
  82:   public int y;
  83: 
  84:   /**
  85:    * Initializes a new instance of <code>Point</code> representing the
  86:    * coordinates (0, 0).
  87:    *
  88:    * @since 1.1
  89:    */
  90:   public Point()
  91:   {
  92:   }
  93: 
  94:   /**
  95:    * Initializes a new instance of <code>Point</code> with coordinates
  96:    * identical to the coordinates of the specified point.
  97:    *
  98:    * @param p the point to copy the coordinates from
  99:    * @throws NullPointerException if p is null
 100:    */
 101:   public Point(Point p)
 102:   {
 103:     x = p.x;
 104:     y = p.y;
 105:   }
 106: 
 107:   /**
 108:    * Initializes a new instance of <code>Point</code> with the specified
 109:    * coordinates.
 110:    *
 111:    * @param x the X coordinate
 112:    * @param y the Y coordinate
 113:    */
 114:   public Point(int x, int y)
 115:   {
 116:     this.x = x;
 117:     this.y = y;
 118:   }
 119: 
 120:   /**
 121:    * Get the x coordinate.
 122:    *
 123:    * @return the value of x, as a double
 124:    */
 125:   public double getX()
 126:   {
 127:     return x;
 128:   }
 129: 
 130:   /**
 131:    * Get the y coordinate.
 132:    *
 133:    * @return the value of y, as a double
 134:    */
 135:   public double getY()
 136:   {
 137:     return y;
 138:   }
 139: 
 140:   /**
 141:    * Returns the location of this point. A pretty useless method, as this
 142:    * is already a point.
 143:    *
 144:    * @return a copy of this point
 145:    * @see #setLocation(Point)
 146:    * @since 1.1
 147:    */
 148:   public Point getLocation()
 149:   {
 150:     return new Point(x, y);
 151:   }
 152: 
 153:   /**
 154:    * Sets this object's coordinates to match those of the specified point.
 155:    *
 156:    * @param p the point to copy the coordinates from
 157:    * @throws NullPointerException if p is null
 158:    * @since 1.1
 159:    */
 160:   public void setLocation(Point p)
 161:   {
 162:     x = p.x;
 163:     y = p.y;
 164:   }
 165: 
 166:   /**
 167:    * Sets this object's coordinates to the specified values.  This method
 168:    * is identical to the <code>move()</code> method.
 169:    *
 170:    * @param x the new X coordinate
 171:    * @param y the new Y coordinate
 172:    */
 173:   public void setLocation(int x, int y)
 174:   {
 175:     this.x = x;
 176:     this.y = y;
 177:   }
 178: 
 179:   /**
 180:    * Sets this object's coordinates to the specified values.  This method
 181:    * rounds to the nearest integer coordinates by adding 0.5 and calling 
 182:    * {@link Math#floor(double)}.
 183:    *
 184:    * @param x the new X coordinate
 185:    * @param y the new Y coordinate
 186:    */
 187:   public void setLocation(double x, double y)
 188:   {
 189:     this.x = (int) Math.floor(x + 0.5);
 190:     this.y = (int) Math.floor(y + 0.5);
 191:   }
 192: 
 193:   /**
 194:    * Sets this object's coordinates to the specified values.  This method
 195:    * is identical to the <code>setLocation(int, int)</code> method.
 196:    *
 197:    * @param x the new X coordinate
 198:    * @param y the new Y coordinate
 199:    */
 200:   public void move(int x, int y)
 201:   {
 202:     this.x = x;
 203:     this.y = y;
 204:   }
 205: 
 206:   /**
 207:    * Changes the coordinates of this point such that the specified
 208:    * <code>dx</code> parameter is added to the existing X coordinate and
 209:    * <code>dy</code> is added to the existing Y coordinate.
 210:    *
 211:    * @param dx the amount to add to the X coordinate
 212:    * @param dy the amount to add to the Y coordinate
 213:    */
 214:   public void translate(int dx, int dy)
 215:   {
 216:     x += dx;
 217:     y += dy;
 218:   }
 219: 
 220:   /**
 221:    * Tests whether or not this object is equal to the specified object.
 222:    * This will be true if and only if the specified object is an instance
 223:    * of Point2D and has the same X and Y coordinates.
 224:    *
 225:    * @param obj the object to test against for equality
 226:    * @return true if the specified object is equal
 227:   */
 228:   public boolean equals(Object obj)
 229:   {
 230:     // NOTE: No special hashCode() method is required for this class,
 231:     // as this equals() implementation is functionally equivalent to
 232:     // super.equals(), which does define a proper hashCode().
 233: 
 234:     if (! (obj instanceof Point2D))
 235:       return false;
 236:     Point2D p = (Point2D) obj;
 237:     return x == p.getX() && y == p.getY();
 238:   }
 239: 
 240:   /**
 241:    * Returns a string representation of this object. The format is:
 242:    * <code>getClass().getName() + "[x=" + x + ",y=" + y + ']'</code>.
 243:    *
 244:    * @return a string representation of this object
 245:    */
 246:   public String toString()
 247:   {
 248:     return getClass().getName() + "[x=" + x + ",y=" + y + ']';
 249:   }
 250: } // class Point