Showing the changes to java/pkg/java/awt/Label.java (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,360 @@ | ||
| 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 | +package java.awt; | |
| 26 | + | |
| 27 | +import java.awt.peer.LabelPeer; | |
| 28 | +import java.io.IOException; | |
| 29 | +import java.io.ObjectInputStream; | |
| 30 | +import javax.accessibility.*; | |
| 31 | + | |
| 32 | +/** | |
| 33 | + * A <code>Label</code> object is a component for placing text in a | |
| 34 | + * container. A label displays a single line of read-only text. | |
| 35 | + * The text can be changed by the application, but a user cannot edit it | |
| 36 | + * directly. | |
| 37 | + * <p> | |
| 38 | + * For example, the code . . . | |
| 39 | + * <p> | |
| 40 | + * <hr><blockquote><pre> | |
| 41 | + * setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); | |
| 42 | + * add(new Label("Hi There!")); | |
| 43 | + * add(new Label("Another Label")); | |
| 44 | + * </pre></blockquote><hr> | |
| 45 | + * <p> | |
| 46 | + * produces the following labels: | |
| 47 | + * <p> | |
| 48 | + * <img src="doc-files/Label-1.gif" alt="Two labels: 'Hi There!' and 'Another label'" | |
| 49 | + * ALIGN=center HSPACE=10 VSPACE=7> | |
| 50 | + * | |
| 51 | + * @author Sami Shaio | |
| 52 | + * @since JDK1.0 | |
| 53 | + */ | |
| 54 | +public class Label extends Component implements Accessible { | |
| 55 | + | |
| 56 | + static { | |
| 57 | + /* ensure that the necessary native libraries are loaded */ | |
| 58 | + Toolkit.loadLibraries(); | |
| 59 | + if (!GraphicsEnvironment.isHeadless()) { | |
| 60 | + initIDs(); | |
| 61 | + } | |
| 62 | + } | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * Indicates that the label should be left justified. | |
| 66 | + */ | |
| 67 | + public static final int LEFT = 0; | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Indicates that the label should be centered. | |
| 71 | + */ | |
| 72 | + public static final int CENTER = 1; | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * Indicates that the label should be right justified. | |
| 76 | + * @since JDK1.0t. | |
| 77 | + */ | |
| 78 | + public static final int RIGHT = 2; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * The text of this label. | |
| 82 | + * This text can be modified by the program | |
| 83 | + * but never by the user. | |
| 84 | + * | |
| 85 | + * @serial | |
| 86 | + * @see #getText() | |
| 87 | + * @see #setText(String) | |
| 88 | + */ | |
| 89 | + String text; | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * The label's alignment. The default alignment is set | |
| 93 | + * to be left justified. | |
| 94 | + * | |
| 95 | + * @serial | |
| 96 | + * @see #getAlignment() | |
| 97 | + * @see #setAlignment(int) | |
| 98 | + */ | |
| 99 | + int alignment = LEFT; | |
| 100 | + | |
| 101 | + private static final String base = "label"; | |
| 102 | + private static int nameCounter = 0; | |
| 103 | + | |
| 104 | + /* | |
| 105 | + * JDK 1.1 serialVersionUID | |
| 106 | + */ | |
| 107 | + private static final long serialVersionUID = 3094126758329070636L; | |
| 108 | + | |
| 109 | + /** | |
| 110 | + * Constructs an empty label. | |
| 111 | + * The text of the label is the empty string <code>""</code>. | |
| 112 | + * @exception HeadlessException if GraphicsEnvironment.isHeadless() | |
| 113 | + * returns true. | |
| 114 | + * @see java.awt.GraphicsEnvironment#isHeadless | |
| 115 | + */ | |
| 116 | + public Label() throws HeadlessException { | |
| 117 | + this("", LEFT); | |
| 118 | + } | |
| 119 | + | |
| 120 | + /** | |
| 121 | + * Constructs a new label with the specified string of text, | |
| 122 | + * left justified. | |
| 123 | + * @param text the string that the label presents. | |
| 124 | + * A <code>null</code> value | |
| 125 | + * will be accepted without causing a NullPointerException | |
| 126 | + * to be thrown. | |
| 127 | + * @exception HeadlessException if GraphicsEnvironment.isHeadless() | |
| 128 | + * returns true. | |
| 129 | + * @see java.awt.GraphicsEnvironment#isHeadless | |
| 130 | + */ | |
| 131 | + public Label(String text) throws HeadlessException { | |
| 132 | + this(text, LEFT); | |
| 133 | + } | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * Constructs a new label that presents the specified string of | |
| 137 | + * text with the specified alignment. | |
| 138 | + * Possible values for <code>alignment</code> are <code>Label.LEFT</code>, | |
| 139 | + * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>. | |
| 140 | + * @param text the string that the label presents. | |
| 141 | + * A <code>null</code> value | |
| 142 | + * will be accepted without causing a NullPointerException | |
| 143 | + * to be thrown. | |
| 144 | + * @param alignment the alignment value. | |
| 145 | + * @exception HeadlessException if GraphicsEnvironment.isHeadless() | |
| 146 | + * returns true. | |
| 147 | + * @see java.awt.GraphicsEnvironment#isHeadless | |
| 148 | + */ | |
| 149 | + public Label(String text, int alignment) throws HeadlessException { | |
| 150 | + GraphicsEnvironment.checkHeadless(); | |
| 151 | + this.text = text; | |
| 152 | + setAlignment(alignment); | |
| 153 | + } | |
| 154 | + | |
| 155 | + /** | |
| 156 | + * Read a label from an object input stream. | |
| 157 | + * @exception HeadlessException if | |
| 158 | + * <code>GraphicsEnvironment.isHeadless()</code> returns | |
| 159 | + * <code>true</code> | |
| 160 | + * @serial | |
| 161 | + * @since 1.4 | |
| 162 | + * @see java.awt.GraphicsEnvironment#isHeadless | |
| 163 | + */ | |
| 164 | + private void readObject(ObjectInputStream s) | |
| 165 | + throws ClassNotFoundException, IOException, HeadlessException { | |
| 166 | + GraphicsEnvironment.checkHeadless(); | |
| 167 | + s.defaultReadObject(); | |
| 168 | + } | |
| 169 | + | |
| 170 | + /** | |
| 171 | + * Construct a name for this component. Called by getName() when the | |
| 172 | + * name is <code>null</code>. | |
| 173 | + */ | |
| 174 | + String constructComponentName() { | |
| 175 | + synchronized (Label.class) { | |
| 176 | + return base + nameCounter++; | |
| 177 | + } | |
| 178 | + } | |
| 179 | + | |
| 180 | + /** | |
| 181 | + * Creates the peer for this label. The peer allows us to | |
| 182 | + * modify the appearance of the label without changing its | |
| 183 | + * functionality. | |
| 184 | + */ | |
| 185 | + public void addNotify() { | |
| 186 | + synchronized (getTreeLock()) { | |
| 187 | + if (peer == null) | |
| 188 | + peer = getToolkit().createLabel(this); | |
| 189 | + super.addNotify(); | |
| 190 | + } | |
| 191 | + } | |
| 192 | + | |
| 193 | + /** | |
| 194 | + * Gets the current alignment of this label. Possible values are | |
| 195 | + * <code>Label.LEFT</code>, <code>Label.RIGHT</code>, and | |
| 196 | + * <code>Label.CENTER</code>. | |
| 197 | + * @see java.awt.Label#setAlignment | |
| 198 | + */ | |
| 199 | + public int getAlignment() { | |
| 200 | + return alignment; | |
| 201 | + } | |
| 202 | + | |
| 203 | + /** | |
| 204 | + * Sets the alignment for this label to the specified alignment. | |
| 205 | + * Possible values are <code>Label.LEFT</code>, | |
| 206 | + * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>. | |
| 207 | + * @param alignment the alignment to be set. | |
| 208 | + * @exception IllegalArgumentException if an improper value for | |
| 209 | + * <code>alignment</code> is given. | |
| 210 | + * @see java.awt.Label#getAlignment | |
| 211 | + */ | |
| 212 | + public synchronized void setAlignment(int alignment) { | |
| 213 | + switch (alignment) { | |
| 214 | + case LEFT: | |
| 215 | + case CENTER: | |
| 216 | + case RIGHT: | |
| 217 | + this.alignment = alignment; | |
| 218 | + LabelPeer peer = (LabelPeer)this.peer; | |
| 219 | + if (peer != null) { | |
| 220 | + peer.setAlignment(alignment); | |
| 221 | + } | |
| 222 | + return; | |
| 223 | + } | |
| 224 | + throw new IllegalArgumentException("improper alignment: " + alignment); | |
| 225 | + } | |
| 226 | + | |
| 227 | + /** | |
| 228 | + * Gets the text of this label. | |
| 229 | + * @return the text of this label, or <code>null</code> if | |
| 230 | + * the text has been set to <code>null</code>. | |
| 231 | + * @see java.awt.Label#setText | |
| 232 | + */ | |
| 233 | + public String getText() { | |
| 234 | + return text; | |
| 235 | + } | |
| 236 | + | |
| 237 | + /** | |
| 238 | + * Sets the text for this label to the specified text. | |
| 239 | + * @param text the text that this label displays. If | |
| 240 | + * <code>text</code> is <code>null</code>, it is | |
| 241 | + * treated for display purposes like an empty | |
| 242 | + * string <code>""</code>. | |
| 243 | + * @see java.awt.Label#getText | |
| 244 | + */ | |
| 245 | + public void setText(String text) { | |
| 246 | + boolean testvalid = false; | |
| 247 | + synchronized (this) { | |
| 248 | + if (text != this.text && (this.text == null || | |
| 249 | + !this.text.equals(text))) { | |
| 250 | + this.text = text; | |
| 251 | + LabelPeer peer = (LabelPeer)this.peer; | |
| 252 | + if (peer != null) { | |
| 253 | + peer.setText(text); | |
| 254 | + } | |
| 255 | + testvalid = true; | |
| 256 | + } | |
| 257 | + } | |
| 258 | + | |
| 259 | + // This could change the preferred size of the Component. | |
| 260 | + if (testvalid) { | |
| 261 | + invalidateIfValid(); | |
| 262 | + } | |
| 263 | + } | |
| 264 | + | |
| 265 | + /** | |
| 266 | + * Returns a string representing the state of this <code>Label</code>. | |
| 267 | + * This method is intended to be used only for debugging purposes, and the | |
| 268 | + * content and format of the returned string may vary between | |
| 269 | + * implementations. The returned string may be empty but may not be | |
| 270 | + * <code>null</code>. | |
| 271 | + * | |
| 272 | + * @return the parameter string of this label | |
| 273 | + */ | |
| 274 | + protected String paramString() { | |
| 275 | + String str = ",align="; | |
| 276 | + switch (alignment) { | |
| 277 | + case LEFT: str += "left"; break; | |
| 278 | + case CENTER: str += "center"; break; | |
| 279 | + case RIGHT: str += "right"; break; | |
| 280 | + } | |
| 281 | + return super.paramString() + str + ",text=" + text; | |
| 282 | + } | |
| 283 | + | |
| 284 | + /** | |
| 285 | + * Initialize JNI field and method IDs | |
| 286 | + */ | |
| 287 | + private static native void initIDs(); | |
| 288 | + | |
| 289 | + | |
| 290 | +///////////////// | |
| 291 | +// Accessibility support | |
| 292 | +//////////////// | |
| 293 | + | |
| 294 | + | |
| 295 | + /** | |
| 296 | + * Gets the AccessibleContext associated with this Label. | |
| 297 | + * For labels, the AccessibleContext takes the form of an | |
| 298 | + * AccessibleAWTLabel. | |
| 299 | + * A new AccessibleAWTLabel instance is created if necessary. | |
| 300 | + * | |
| 301 | + * @return an AccessibleAWTLabel that serves as the | |
| 302 | + * AccessibleContext of this Label | |
| 303 | + * @since 1.3 | |
| 304 | + */ | |
| 305 | + public AccessibleContext getAccessibleContext() { | |
| 306 | + if (accessibleContext == null) { | |
| 307 | + accessibleContext = new AccessibleAWTLabel(); | |
| 308 | + } | |
| 309 | + return accessibleContext; | |
| 310 | + } | |
| 311 | + | |
| 312 | + /** | |
| 313 | + * This class implements accessibility support for the | |
| 314 | + * <code>Label</code> class. It provides an implementation of the | |
| 315 | + * Java Accessibility API appropriate to label user-interface elements. | |
| 316 | + * @since 1.3 | |
| 317 | + */ | |
| 318 | + protected class AccessibleAWTLabel extends AccessibleAWTComponent | |
| 319 | + { | |
| 320 | + /* | |
| 321 | + * JDK 1.3 serialVersionUID | |
| 322 | + */ | |
| 323 | + private static final long serialVersionUID = -3568967560160480438L; | |
| 324 | + | |
| 325 | + public AccessibleAWTLabel() { | |
| 326 | + super(); | |
| 327 | + } | |
| 328 | + | |
| 329 | + /** | |
| 330 | + * Get the accessible name of this object. | |
| 331 | + * | |
| 332 | + * @return the localized name of the object -- can be null if this | |
| 333 | + * object does not have a name | |
| 334 | + * @see AccessibleContext#setAccessibleName | |
| 335 | + */ | |
| 336 | + public String getAccessibleName() { | |
| 337 | + if (accessibleName != null) { | |
| 338 | + return accessibleName; | |
| 339 | + } else { | |
| 340 | + if (getText() == null) { | |
| 341 | + return super.getAccessibleName(); | |
| 342 | + } else { | |
| 343 | + return getText(); | |
| 344 | + } | |
| 345 | + } | |
| 346 | + } | |
| 347 | + | |
| 348 | + /** | |
| 349 | + * Get the role of this object. | |
| 350 | + * | |
| 351 | + * @return an instance of AccessibleRole describing the role of the object | |
| 352 | + * @see AccessibleRole | |
| 353 | + */ | |
| 354 | + public AccessibleRole getAccessibleRole() { | |
| 355 | + return AccessibleRole.LABEL; | |
| 356 | + } | |
| 357 | + | |
| 358 | + } // inner class AccessibleAWTLabel | |
| 359 | + | |
| 360 | +} | |