1/* 2 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package java.awt; 27 28import java.awt.geom.Point2D; 29import java.beans.Transient; 30 31/** 32 * A point representing a location in {@code (x,y)} coordinate space, 33 * specified in integer precision. 34 * 35 * @author Sami Shaio 36 * @since 1.0 37 */ 38public class Point extends Point2D implements java.io.Serializable { 39 /** 40 * The X coordinate of this {@code Point}. 41 * If no X coordinate is set it will default to 0. 42 * 43 * @serial 44 * @see #getLocation() 45 * @see #move(int, int) 46 * @since 1.0 47 */ 48 public int x; 49 50 /** 51 * The Y coordinate of this {@code Point}. 52 * If no Y coordinate is set it will default to 0. 53 * 54 * @serial 55 * @see #getLocation() 56 * @see #move(int, int) 57 * @since 1.0 58 */ 59 public int y; 60 61 /* 62 * JDK 1.1 serialVersionUID 63 */ 64 private static final long serialVersionUID = -5276940640259749850L; 65 66 /** 67 * Constructs and initializes a point at the origin 68 * (0, 0) of the coordinate space. 69 * @since 1.1 70 */ 71 public Point() { 72 this(0, 0); 73 } 74 75 /** 76 * Constructs and initializes a point with the same location as 77 * the specified {@code Point} object. 78 * @param p a point 79 * @since 1.1 80 */ 81 public Point(Point p) { 82 this(p.x, p.y); 83 } 84 85 /** 86 * Constructs and initializes a point at the specified 87 * {@code (x,y)} location in the coordinate space. 88 * @param x the X coordinate of the newly constructed {@code Point} 89 * @param y the Y coordinate of the newly constructed {@code Point} 90 * @since 1.0 91 */ 92 public Point(int x, int y) { 93 this.x = x; 94 this.y = y; 95 } 96 97 /** 98 * {@inheritDoc} 99 * @since 1.2 100 */ 101 public double getX() { 102 return x; 103 } 104 105 /** 106 * {@inheritDoc} 107 * @since 1.2 108 */ 109 public double getY() { 110 return y; 111 } 112 113 /** 114 * Returns the location of this point. 115 * This method is included for completeness, to parallel the 116 * {@code getLocation} method of {@code Component}. 117 * @return a copy of this point, at the same location 118 * @see java.awt.Component#getLocation 119 * @see java.awt.Point#setLocation(java.awt.Point) 120 * @see java.awt.Point#setLocation(int, int) 121 * @since 1.1 122 */ 123 @Transient 124 public Point getLocation() { 125 return new Point(x, y); 126 } 127 128 /** 129 * Sets the location of the point to the specified location. 130 * This method is included for completeness, to parallel the 131 * {@code setLocation} method of {@code Component}. 132 * @param p a point, the new location for this point 133 * @see java.awt.Component#setLocation(java.awt.Point) 134 * @see java.awt.Point#getLocation 135 * @since 1.1 136 */ 137 public void setLocation(Point p) { 138 setLocation(p.x, p.y); 139 } 140 141 /** 142 * Changes the point to have the specified location. 143 * <p> 144 * This method is included for completeness, to parallel the 145 * {@code setLocation} method of {@code Component}. 146 * Its behavior is identical with <code>move(int, int)</code>. 147 * @param x the X coordinate of the new location 148 * @param y the Y coordinate of the new location 149 * @see java.awt.Component#setLocation(int, int) 150 * @see java.awt.Point#getLocation 151 * @see java.awt.Point#move(int, int) 152 * @since 1.1 153 */ 154 public void setLocation(int x, int y) { 155 move(x, y); 156 } 157 158 /** 159 * Sets the location of this point to the specified double coordinates. 160 * The double values will be rounded to integer values. 161 * Any number smaller than {@code Integer.MIN_VALUE} 162 * will be reset to {@code MIN_VALUE}, and any number 163 * larger than {@code Integer.MAX_VALUE} will be 164 * reset to {@code MAX_VALUE}. 165 * 166 * @param x the X coordinate of the new location 167 * @param y the Y coordinate of the new location 168 * @see #getLocation 169 */ 170 public void setLocation(double x, double y) { 171 this.x = (int) Math.floor(x+0.5); 172 this.y = (int) Math.floor(y+0.5); 173 } 174 175 /** 176 * Moves this point to the specified location in the 177 * {@code (x,y)} coordinate plane. This method 178 * is identical with <code>setLocation(int, int)</code>. 179 * @param x the X coordinate of the new location 180 * @param y the Y coordinate of the new location 181 * @see java.awt.Component#setLocation(int, int) 182 */ 183 public void move(int x, int y) { 184 this.x = x; 185 this.y = y; 186 } 187 188 /** 189 * Translates this point, at location {@code (x,y)}, 190 * by {@code dx} along the {@code x} axis and {@code dy} 191 * along the {@code y} axis so that it now represents the point 192 * {@code (x+dx,y+dy)}. 193 * 194 * @param dx the distance to move this point 195 * along the X axis 196 * @param dy the distance to move this point 197 * along the Y axis 198 */ 199 public void translate(int dx, int dy) { 200 this.x += dx; 201 this.y += dy; 202 } 203 204 /** 205 * Determines whether or not two points are equal. Two instances of 206 * {@code Point2D} are equal if the values of their 207 * {@code x} and {@code y} member fields, representing 208 * their position in the coordinate space, are the same. 209 * @param obj an object to be compared with this {@code Point2D} 210 * @return {@code true} if the object to be compared is 211 * an instance of {@code Point2D} and has 212 * the same values; {@code false} otherwise. 213 */ 214 public boolean equals(Object obj) { 215 if (obj instanceof Point) { 216 Point pt = (Point)obj; 217 return (x == pt.x) && (y == pt.y); 218 } 219 return super.equals(obj); 220 } 221 222 /** 223 * Returns a string representation of this point and its location 224 * in the {@code (x,y)} coordinate space. This method is 225 * intended to be used only for debugging purposes, and the content 226 * and format of the returned string may vary between implementations. 227 * The returned string may be empty but may not be {@code null}. 228 * 229 * @return a string representation of this point 230 */ 231 public String toString() { 232 return getClass().getName() + "[x=" + x + ",y=" + y + "]"; 233 } 234} 235