Frames | No Frames |
1: /* Dimension.java -- represents a 2-dimensional span 2: Copyright (C) 1999, 2000, 2002 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.Dimension2D; 42: import java.io.Serializable; 43: 44: /** 45: * This class holds a width and height value pair. This is used in plenty 46: * of windowing classes, but also has geometric meaning. 47: * 48: * <p>It is valid for a dimension to have negative width or height; but it 49: * is considered to have no area. Therefore, the behavior in various methods 50: * is undefined in such a case. 51: * 52: * <p>There are some public fields; if you mess with them in an inconsistent 53: * manner, it is your own fault when you get invalid results. Also, this 54: * class is not threadsafe. 55: * 56: * @author Per Bothner (bothner@cygnus.com) 57: * @author Aaron M. Renn (arenn@urbanophile.com) 58: * @author Eric Blake (ebb9@email.byu.edu) 59: * @see Component 60: * @see LayoutManager 61: * @since 1.0 62: * @status updated to 1.14 63: */ 64: public class Dimension extends Dimension2D implements Serializable 65: { 66: /** 67: * Compatible with JDK 1.0+. 68: */ 69: private static final long serialVersionUID = 4723952579491349524L; 70: 71: /** 72: * The width of this object. 73: * 74: * @see #getSize() 75: * @see #setSize(double, double) 76: * @serial the width 77: */ 78: public int width; 79: 80: /** 81: * The height of this object. 82: * 83: * @see #getSize() 84: * @see #setSize(double, double) 85: * @serial the height 86: */ 87: public int height; 88: 89: /** 90: * Create a new Dimension with a width and height of zero. 91: */ 92: public Dimension() 93: { 94: } 95: 96: /** 97: * Create a new Dimension with width and height identical to that of the 98: * specified dimension. 99: * 100: * @param d the Dimension to copy 101: * @throws NullPointerException if d is null 102: */ 103: public Dimension(Dimension d) 104: { 105: width = d.width; 106: height = d.height; 107: } 108: 109: /** 110: * Create a new Dimension with the specified width and height. 111: * 112: * @param w the width of this object 113: * @param h the height of this object 114: */ 115: public Dimension(int w, int h) 116: { 117: width = w; 118: height = h; 119: } 120: 121: /** 122: * Gets the width of this dimension. 123: * 124: * @return the width, as a double 125: */ 126: public double getWidth() 127: { 128: return width; 129: } 130: 131: /** 132: * Gets the height of this dimension. 133: * 134: * @return the height, as a double 135: */ 136: public double getHeight() 137: { 138: return height; 139: } 140: 141: /** 142: * Sets the size of this dimension. The values are rounded to int. 143: * 144: * @param w the new width 145: * @param h the new height 146: * @since 1.2 147: */ 148: public void setSize(double w, double h) 149: { 150: width = (int) w; 151: height = (int) h; 152: } 153: 154: /** 155: * Returns the size of this dimension. A pretty useless method, as this is 156: * already a dimension. 157: * 158: * @return a copy of this dimension 159: * @see #setSize(Dimension) 160: * @since 1.1 161: */ 162: public Dimension getSize() 163: { 164: return new Dimension(width, height); 165: } 166: 167: /** 168: * Sets the width and height of this object to match that of the 169: * specified object. 170: * 171: * @param d the Dimension to get the new width and height from 172: * @throws NullPointerException if d is null 173: * @see #getSize() 174: * @since 1.1 175: */ 176: public void setSize(Dimension d) 177: { 178: width = d.width; 179: height = d.height; 180: } 181: 182: /** 183: * Sets the width and height of this object to the specified values. 184: * 185: * @param w the new width value 186: * @param h the new height value 187: */ 188: public void setSize(int w, int h) 189: { 190: width = w; 191: height = h; 192: } 193: 194: /** 195: * Tests this object for equality against the specified object. This will 196: * be true if and only if the specified object is an instance of 197: * Dimension2D, and has the same width and height. 198: * 199: * @param obj the object to test against 200: * @return true if the object is equal to this 201: */ 202: public boolean equals(Object obj) 203: { 204: if (! (obj instanceof Dimension)) 205: return false; 206: Dimension dim = (Dimension) obj; 207: return height == dim.height && width == dim.width; 208: } 209: 210: /** 211: * Return the hashcode for this object. It is not documented, but appears 212: * to be <code>((width + height) * (width + height + 1) / 2) + width</code>. 213: * 214: * @return the hashcode 215: */ 216: public int hashCode() 217: { 218: // Reverse engineering this was fun! 219: return (width + height) * (width + height + 1) / 2 + width; 220: } 221: 222: /** 223: * Returns a string representation of this object. The format is: 224: * <code>getClass().getName() + "[width=" + width + ",height=" + height 225: * + ']'</code>. 226: * 227: * @return a string representation of this object 228: */ 229: public String toString() 230: { 231: return getClass().getName() 232: + "[width=" + width + ",height=" + height + ']'; 233: } 234: } // class Dimension