001: /*
002: * @(#)Dimension.java 1.24 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027: package java.awt;
028:
029: /**
030: * The <code>Dimension</code> class encapsulates the width and
031: * height of a component in a single object. The class is
032: * associated with certain properties of components. Several methods
033: * defined by the <code>Component</code> class and the
034: * <code>LayoutManager</code> interface return a
035: * <code>Dimension</code> object.
036: * <p>
037: * Normally the values of <code>width</code>
038: * and <code>height</code> are non-negative integers.
039: * The constructors that allow you to create a dimension do
040: * not prevent you from setting a negative value for these properties.
041: * If the value of <code>width</code> or <code>height</code> is
042: * negative, the behavior of some methods defined by other objects is
043: * undefined.
044: *
045: * @version 1.14, 07/01/98
046: * @author Sami Shaio
047: * @author Arthur van Hoff
048: * @see java.awt.Component
049: * @see java.awt.LayoutManager
050: * @since JDK1.0
051: */
052: public class Dimension implements java.io.Serializable, Cloneable {
053: /**
054: * The width dimension.
055: */
056: public int width;
057: /**
058: * The height dimension.
059: */
060: public int height;
061: /*
062: * JDK 1.1 serialVersionUID
063: */
064: private static final long serialVersionUID = 4723952579491349524L;
065:
066: /**
067: * Creates an instance of <code>Dimension</code> with a width
068: * of zero and a height of zero.
069: * @since JDK1.0
070: */
071: public Dimension() {
072: this (0, 0);
073: }
074:
075: /**
076: * Creates an instance of <code>Dimension</code> whose width
077: * and height are the same as for the specified dimension.
078: * @param d the specified dimension for the
079: * <code>width</code> and
080: * <code>height</code> values.
081: * @since JDK1.0
082: */
083: public Dimension(Dimension d) {
084: this (d.width, d.height);
085: }
086:
087: /**
088: * Constructs a Dimension and initializes it to the specified width and
089: * specified height.
090: * @param width the specified width dimension
091: * @param height the specified height dimension
092: * @since JDK1.0
093: */
094: public Dimension(int width, int height) {
095: this .width = width;
096: this .height = height;
097: }
098:
099: /**
100: * Gets the size of this <code>Dimension</code> object.
101: * This method is included for completeness, to parallel the
102: * <code>getSize</code> method defined by <code>Component</code>.
103: * @return the size of this dimension, a new instance of
104: * <code>Dimension</code> with the same width and height.
105: * @see java.awt.Dimension#setSize
106: * @see java.awt.Component#getSize
107: * @since JDK1.1
108: */
109: public Dimension getSize() {
110: return new Dimension(width, height);
111: }
112:
113: /**
114: * Set the size of this <code>Dimension</code> object to the specified size.
115: * This method is included for completeness, to parallel the
116: * <code>setSize</code> method defined by <code>Component</code>.
117: * @param d the new size for this <code>Dimension</code> object.
118: * @see java.awt.Dimension#getSize
119: * @see java.awt.Component#setSize
120: * @since JDK1.1
121: */
122: public void setSize(Dimension d) {
123: setSize(d.width, d.height);
124: }
125:
126: /**
127: * Set the size of this <code>Dimension</code> object
128: * to the specified width and height.
129: * This method is included for completeness, to parallel the
130: * <code>setSize</code> method defined by <code>Component</code>.
131: * @param width the new width for this <code>Dimension</code> object.
132: * @param height the new height for this <code>Dimension</code> object.
133: * @see java.awt.Dimension#getSize
134: * @see java.awt.Component#setSize
135: * @since JDK1.1
136: */
137: public void setSize(int width, int height) {
138: this .width = width;
139: this .height = height;
140: }
141:
142: /**
143: * Checks whether two dimension objects have equal values.
144: */
145: public boolean equals(Object obj) {
146: if (obj instanceof Dimension) {
147: Dimension d = (Dimension) obj;
148: return (width == d.width) && (height == d.height);
149: }
150: return false;
151: }
152:
153: /**
154: * Returns the hash code for this Dimension.
155: *
156: * @return a hash code for this Dimension.
157: */
158: public int hashCode() {
159: int sum = width + height;
160: return sum * (sum + 1) / 2 + width;
161: }
162:
163: /**
164: * Returns a string that represents this
165: * <code>Dimension</code> object's values.
166: * @return a string representation of this dimension,
167: * including the values of <code>width</code>
168: * and <code>height</code>.
169: * @since JDK1.0
170: */
171: public String toString() {
172: return getClass().getName() + "[width=" + width + ",height="
173: + height + "]";
174: }
175:
176: /**
177: * Creates a new object of the same class as this object.
178: *
179: * @return a clone of this instance.
180: * @exception OutOfMemoryError if there is not enough memory.
181: * @see java.lang.Cloneable
182: * @since 1.2
183: */
184: public Object clone() {
185: try {
186: return super .clone();
187: } catch (CloneNotSupportedException e) {
188: // this shouldn't happen, since we are Cloneable
189: throw new InternalError();
190: }
191: }
192:
193: }
|