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.Dimension2D; 29 import java.beans.Transient; 30 31 /** 32 * The {@code Dimension} class encapsulates the width and 33 * height of a component (in integer precision) in a single object. 34 * The class is 35 * associated with certain properties of components. Several methods 36 * defined by the {@code Component} class and the 37 * {@code LayoutManager} interface return a 38 * {@code Dimension} object. 39 * <p> 40 * Normally the values of {@code width} 41 * and {@code height} are non-negative integers. 42 * The constructors that allow you to create a dimension do 43 * not prevent you from setting a negative value for these properties. 44 * If the value of {@code width} or {@code height} is 45 * negative, the behavior of some methods defined by other objects is 46 * undefined. 47 * 48 * @author Sami Shaio 49 * @author Arthur van Hoff 50 * @see java.awt.Component 51 * @see java.awt.LayoutManager 52 * @since 1.0 53 */ 54 public class Dimension extends Dimension2D implements java.io.Serializable { 55 56 /** 57 * The width dimension; negative values can be used. 58 * 59 * @serial 60 * @see #getSize 61 * @see #setSize 62 * @since 1.0 63 */ 64 public int width; 65 66 /** 67 * The height dimension; negative values can be used. 68 * 69 * @serial 70 * @see #getSize 71 * @see #setSize 72 * @since 1.0 73 */ 74 public int height; 75 76 /* 77 * JDK 1.1 serialVersionUID 78 */ 79 private static final long serialVersionUID = 4723952579491349524L; 80 81 /** 82 * Initialize JNI field and method IDs 83 */ initIDs()84 private static native void initIDs(); 85 86 static { 87 /* ensure that the necessary native libraries are loaded */ Toolkit.loadLibraries()88 Toolkit.loadLibraries(); 89 if (!GraphicsEnvironment.isHeadless()) { initIDs()90 initIDs(); 91 } 92 } 93 94 /** 95 * Creates an instance of {@code Dimension} with a width 96 * of zero and a height of zero. 97 */ Dimension()98 public Dimension() { 99 this(0, 0); 100 } 101 102 /** 103 * Creates an instance of {@code Dimension} whose width 104 * and height are the same as for the specified dimension. 105 * 106 * @param d the specified dimension for the 107 * {@code width} and 108 * {@code height} values 109 */ Dimension(Dimension d)110 public Dimension(Dimension d) { 111 this(d.width, d.height); 112 } 113 114 /** 115 * Constructs a {@code Dimension} and initializes 116 * it to the specified width and specified height. 117 * 118 * @param width the specified width 119 * @param height the specified height 120 */ Dimension(int width, int height)121 public Dimension(int width, int height) { 122 this.width = width; 123 this.height = height; 124 } 125 126 /** 127 * {@inheritDoc} 128 * @since 1.2 129 */ getWidth()130 public double getWidth() { 131 return width; 132 } 133 134 /** 135 * {@inheritDoc} 136 * @since 1.2 137 */ getHeight()138 public double getHeight() { 139 return height; 140 } 141 142 /** 143 * Sets the size of this {@code Dimension} object to 144 * the specified width and height in double precision. 145 * Note that if {@code width} or {@code height} 146 * are larger than {@code Integer.MAX_VALUE}, they will 147 * be reset to {@code Integer.MAX_VALUE}. 148 * 149 * @param width the new width for the {@code Dimension} object 150 * @param height the new height for the {@code Dimension} object 151 * @since 1.2 152 */ setSize(double width, double height)153 public void setSize(double width, double height) { 154 this.width = (int) Math.ceil(width); 155 this.height = (int) Math.ceil(height); 156 } 157 158 /** 159 * Gets the size of this {@code Dimension} object. 160 * This method is included for completeness, to parallel the 161 * {@code getSize} method defined by {@code Component}. 162 * 163 * @return the size of this dimension, a new instance of 164 * {@code Dimension} with the same width and height 165 * @see java.awt.Dimension#setSize 166 * @see java.awt.Component#getSize 167 * @since 1.1 168 */ 169 @Transient getSize()170 public Dimension getSize() { 171 return new Dimension(width, height); 172 } 173 174 /** 175 * Sets the size of this {@code Dimension} object to the specified size. 176 * This method is included for completeness, to parallel the 177 * {@code setSize} method defined by {@code Component}. 178 * @param d the new size for this {@code Dimension} object 179 * @see java.awt.Dimension#getSize 180 * @see java.awt.Component#setSize 181 * @since 1.1 182 */ setSize(Dimension d)183 public void setSize(Dimension d) { 184 setSize(d.width, d.height); 185 } 186 187 /** 188 * Sets the size of this {@code Dimension} object 189 * to the specified width and height. 190 * This method is included for completeness, to parallel the 191 * {@code setSize} method defined by {@code Component}. 192 * 193 * @param width the new width for this {@code Dimension} object 194 * @param height the new height for this {@code Dimension} object 195 * @see java.awt.Dimension#getSize 196 * @see java.awt.Component#setSize 197 * @since 1.1 198 */ setSize(int width, int height)199 public void setSize(int width, int height) { 200 this.width = width; 201 this.height = height; 202 } 203 204 /** 205 * Checks whether two dimension objects have equal values. 206 */ equals(Object obj)207 public boolean equals(Object obj) { 208 if (obj instanceof Dimension) { 209 Dimension d = (Dimension)obj; 210 return (width == d.width) && (height == d.height); 211 } 212 return false; 213 } 214 215 /** 216 * Returns the hash code for this {@code Dimension}. 217 * 218 * @return a hash code for this {@code Dimension} 219 */ hashCode()220 public int hashCode() { 221 int sum = width + height; 222 return sum * (sum + 1)/2 + width; 223 } 224 225 /** 226 * Returns a string representation of the values of this 227 * {@code Dimension} object's {@code height} and 228 * {@code width} fields. This method is intended to be used only 229 * for debugging purposes, and the content and format of the returned 230 * string may vary between implementations. The returned string may be 231 * empty but may not be {@code null}. 232 * 233 * @return a string representation of this {@code Dimension} 234 * object 235 */ toString()236 public String toString() { 237 return getClass().getName() + "[width=" + width + ",height=" + height + "]"; 238 } 239 } 240