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
26 package java.awt;
27
28 import java.awt.geom.Point2D;
29 import 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 */
38 public 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