| /* | |
| * Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. Oracle designates this | |
| * particular file as subject to the "Classpath" exception as provided | |
| * by Oracle in the LICENSE file that accompanied this code. | |
| * | |
| * This code is distributed in the hope that it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| * version 2 for more details (a copy is included in the LICENSE file that | |
| * accompanied this code). | |
| * | |
| * You should have received a copy of the GNU General Public License version | |
| * 2 along with this work; if not, write to the Free Software Foundation, | |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| * | |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| * or visit www.oracle.com if you need additional information or have any | |
| * questions. | |
| */ | |
| package java.awt; | |
| import java.awt.geom.Point2D; | |
| import java.beans.Transient; | |
| import java.io.Serial; | |
| /** | |
| * A point representing a location in {@code (x,y)} coordinate space, | |
| * specified in integer precision. | |
| * | |
| * @author Sami Shaio | |
| * @since 1.0 | |
| */ | |
| public class Point extends Point2D implements java.io.Serializable { | |
| /** | |
| * The X coordinate of this {@code Point}. | |
| * If no X coordinate is set it will default to 0. | |
| * | |
| * @serial | |
| * @see #getLocation() | |
| * @see #move(int, int) | |
| * @since 1.0 | |
| */ | |
| public int x; | |
| /** | |
| * The Y coordinate of this {@code Point}. | |
| * If no Y coordinate is set it will default to 0. | |
| * | |
| * @serial | |
| * @see #getLocation() | |
| * @see #move(int, int) | |
| * @since 1.0 | |
| */ | |
| public int y; | |
| /** | |
| * Use serialVersionUID from JDK 1.1 for interoperability. | |
| */ | |
| @Serial | |
| private static final long serialVersionUID = -5276940640259749850L; | |
| /** | |
| * Constructs and initializes a point at the origin | |
| * (0, 0) of the coordinate space. | |
| * @since 1.1 | |
| */ | |
| public Point() { | |
| this(0, 0); | |
| } | |
| /** | |
| * Constructs and initializes a point with the same location as | |
| * the specified {@code Point} object. | |
| * @param p a point | |
| * @since 1.1 | |
| */ | |
| public Point(Point p) { | |
| this(p.x, p.y); | |
| } | |
| /** | |
| * Constructs and initializes a point at the specified | |
| * {@code (x,y)} location in the coordinate space. | |
| * @param x the X coordinate of the newly constructed {@code Point} | |
| * @param y the Y coordinate of the newly constructed {@code Point} | |
| * @since 1.0 | |
| */ | |
| public Point(int x, int y) { | |
| this.x = x; | |
| this.y = y; | |
| } | |
| /** | |
| * {@inheritDoc} | |
| * @since 1.2 | |
| */ | |
| public double getX() { | |
| return x; | |
| } | |
| /** | |
| * {@inheritDoc} | |
| * @since 1.2 | |
| */ | |
| public double getY() { | |
| return y; | |
| } | |
| /** | |
| * Returns the location of this point. | |
| * This method is included for completeness, to parallel the | |
| * {@code getLocation} method of {@code Component}. | |
| * @return a copy of this point, at the same location | |
| * @see java.awt.Component#getLocation | |
| * @see java.awt.Point#setLocation(java.awt.Point) | |
| * @see java.awt.Point#setLocation(int, int) | |
| * @since 1.1 | |
| */ | |
| @Transient | |
| public Point getLocation() { | |
| return new Point(x, y); | |
| } | |
| /** | |
| * Sets the location of the point to the specified location. | |
| * This method is included for completeness, to parallel the | |
| * {@code setLocation} method of {@code Component}. | |
| * @param p a point, the new location for this point | |
| * @see java.awt.Component#setLocation(java.awt.Point) | |
| * @see java.awt.Point#getLocation | |
| * @since 1.1 | |
| */ | |
| public void setLocation(Point p) { | |
| setLocation(p.x, p.y); | |
| } | |
| /** | |
| * Changes the point to have the specified location. | |
| * <p> | |
| * This method is included for completeness, to parallel the | |
| * {@code setLocation} method of {@code Component}. | |
| * Its behavior is identical with <code>move(int, int)</code>. | |
| * @param x the X coordinate of the new location | |
| * @param y the Y coordinate of the new location | |
| * @see java.awt.Component#setLocation(int, int) | |
| * @see java.awt.Point#getLocation | |
| * @see java.awt.Point#move(int, int) | |
| * @since 1.1 | |
| */ | |
| public void setLocation(int x, int y) { | |
| move(x, y); | |
| } | |
| /** | |
| * Sets the location of this point to the specified double coordinates. | |
| * The double values will be rounded to integer values. | |
| * Any number smaller than {@code Integer.MIN_VALUE} | |
| * will be reset to {@code MIN_VALUE}, and any number | |
| * larger than {@code Integer.MAX_VALUE} will be | |
| * reset to {@code MAX_VALUE}. | |
| * | |
| * @param x the X coordinate of the new location | |
| * @param y the Y coordinate of the new location | |
| * @see #getLocation | |
| */ | |
| public void setLocation(double x, double y) { | |
| this.x = (int) Math.floor(x+0.5); | |
| this.y = (int) Math.floor(y+0.5); | |
| } | |
| /** | |
| * Moves this point to the specified location in the | |
| * {@code (x,y)} coordinate plane. This method | |
| * is identical with <code>setLocation(int, int)</code>. | |
| * @param x the X coordinate of the new location | |
| * @param y the Y coordinate of the new location | |
| * @see java.awt.Component#setLocation(int, int) | |
| */ | |
| public void move(int x, int y) { | |
| this.x = x; | |
| this.y = y; | |
| } | |
| /** | |
| * Translates this point, at location {@code (x,y)}, | |
| * by {@code dx} along the {@code x} axis and {@code dy} | |
| * along the {@code y} axis so that it now represents the point | |
| * {@code (x+dx,y+dy)}. | |
| * | |
| * @param dx the distance to move this point | |
| * along the X axis | |
| * @param dy the distance to move this point | |
| * along the Y axis | |
| */ | |
| public void translate(int dx, int dy) { | |
| this.x += dx; | |
| this.y += dy; | |
| } | |
| /** | |
| * Determines whether or not two points are equal. Two instances of | |
| * {@code Point2D} are equal if the values of their | |
| * {@code x} and {@code y} member fields, representing | |
| * their position in the coordinate space, are the same. | |
| * @param obj an object to be compared with this {@code Point2D} | |
| * @return {@code true} if the object to be compared is | |
| * an instance of {@code Point2D} and has | |
| * the same values; {@code false} otherwise. | |
| */ | |
| public boolean equals(Object obj) { | |
| if (obj instanceof Point) { | |
| Point pt = (Point)obj; | |
| return (x == pt.x) && (y == pt.y); | |
| } | |
| return super.equals(obj); | |
| } | |
| /** | |
| * Returns a string representation of this point and its location | |
| * in the {@code (x,y)} coordinate space. This method is | |
| * intended to be used only for debugging purposes, and the content | |
| * and format of the returned string may vary between implementations. | |
| * The returned string may be empty but may not be {@code null}. | |
| * | |
| * @return a string representation of this point | |
| */ | |
| public String toString() { | |
| return getClass().getName() + "[x=" + x + ",y=" + y + "]"; | |
| } | |
| } |