360 lines · 11.2 KB · Java
RawDownload
/* * Copyright (c) 1995, 2008, 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.peer.LabelPeer;import java.io.IOException;import java.io.ObjectInputStream;import javax.accessibility.*; /** * A <code>Label</code> object is a component for placing text in a * container. A label displays a single line of read-only text. * The text can be changed by the application, but a user cannot edit it * directly. * <p> * For example, the code&nbsp;.&nbsp;.&nbsp;. * <p> * <hr><blockquote><pre> * setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); * add(new Label("Hi There!")); * add(new Label("Another Label")); * </pre></blockquote><hr> * <p> * produces the following labels: * <p> * <img src="doc-files/Label-1.gif" alt="Two labels: 'Hi There!' and 'Another label'" * ALIGN=center HSPACE=10 VSPACE=7> * * @author      Sami Shaio * @since       JDK1.0 */public class Label extends Component implements Accessible {     static {        /* ensure that the necessary native libraries are loaded */        Toolkit.loadLibraries();        if (!GraphicsEnvironment.isHeadless()) {            initIDs();        }    }     /**     * Indicates that the label should be left justified.     */    public static final int LEFT        = 0;     /**     * Indicates that the label should be centered.     */    public static final int CENTER      = 1;     /**     * Indicates that the label should be right justified.     * @since   JDK1.0t.     */    public static final int RIGHT       = 2;     /**     * The text of this label.     * This text can be modified by the program     * but never by the user.     *     * @serial     * @see #getText()     * @see #setText(String)     */    String text;     /**     * The label's alignment.  The default alignment is set     * to be left justified.     *     * @serial     * @see #getAlignment()     * @see #setAlignment(int)     */    int    alignment = LEFT;     private static final String base = "label";    private static int nameCounter = 0;     /*     * JDK 1.1 serialVersionUID     */     private static final long serialVersionUID = 3094126758329070636L;     /**     * Constructs an empty label.     * The text of the label is the empty string <code>""</code>.     * @exception HeadlessException if GraphicsEnvironment.isHeadless()     * returns true.     * @see java.awt.GraphicsEnvironment#isHeadless     */    public Label() throws HeadlessException {        this("", LEFT);    }     /**     * Constructs a new label with the specified string of text,     * left justified.     * @param text the string that the label presents.     *        A <code>null</code> value     *        will be accepted without causing a NullPointerException     *        to be thrown.     * @exception HeadlessException if GraphicsEnvironment.isHeadless()     * returns true.     * @see java.awt.GraphicsEnvironment#isHeadless     */    public Label(String text) throws HeadlessException {        this(text, LEFT);    }     /**     * Constructs a new label that presents the specified string of     * text with the specified alignment.     * Possible values for <code>alignment</code> are <code>Label.LEFT</code>,     * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>.     * @param text the string that the label presents.     *        A <code>null</code> value     *        will be accepted without causing a NullPointerException     *        to be thrown.     * @param     alignment   the alignment value.     * @exception HeadlessException if GraphicsEnvironment.isHeadless()     * returns true.     * @see java.awt.GraphicsEnvironment#isHeadless     */    public Label(String text, int alignment) throws HeadlessException {        GraphicsEnvironment.checkHeadless();        this.text = text;        setAlignment(alignment);    }     /**     * Read a label from an object input stream.     * @exception HeadlessException if     * <code>GraphicsEnvironment.isHeadless()</code> returns     * <code>true</code>     * @serial     * @since 1.4     * @see java.awt.GraphicsEnvironment#isHeadless     */    private void readObject(ObjectInputStream s)        throws ClassNotFoundException, IOException, HeadlessException {        GraphicsEnvironment.checkHeadless();        s.defaultReadObject();    }     /**     * Construct a name for this component.  Called by getName() when the     * name is <code>null</code>.     */    String constructComponentName() {        synchronized (Label.class) {            return base + nameCounter++;        }    }     /**     * Creates the peer for this label.  The peer allows us to     * modify the appearance of the label without changing its     * functionality.     */    public void addNotify() {        synchronized (getTreeLock()) {            if (peer == null)                peer = getToolkit().createLabel(this);            super.addNotify();        }    }     /**     * Gets the current alignment of this label. Possible values are     * <code>Label.LEFT</code>, <code>Label.RIGHT</code>, and     * <code>Label.CENTER</code>.     * @see        java.awt.Label#setAlignment     */    public int getAlignment() {        return alignment;    }     /**     * Sets the alignment for this label to the specified alignment.     * Possible values are <code>Label.LEFT</code>,     * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>.     * @param      alignment    the alignment to be set.     * @exception  IllegalArgumentException if an improper value for     *                          <code>alignment</code> is given.     * @see        java.awt.Label#getAlignment     */    public synchronized void setAlignment(int alignment) {        switch (alignment) {          case LEFT:          case CENTER:          case RIGHT:            this.alignment = alignment;            LabelPeer peer = (LabelPeer)this.peer;            if (peer != null) {                peer.setAlignment(alignment);            }            return;        }        throw new IllegalArgumentException("improper alignment: " + alignment);    }     /**     * Gets the text of this label.     * @return     the text of this label, or <code>null</code> if     *             the text has been set to <code>null</code>.     * @see        java.awt.Label#setText     */    public String getText() {        return text;    }     /**     * Sets the text for this label to the specified text.     * @param      text the text that this label displays. If     *             <code>text</code> is <code>null</code>, it is     *             treated for display purposes like an empty     *             string <code>""</code>.     * @see        java.awt.Label#getText     */    public void setText(String text) {        boolean testvalid = false;        synchronized (this) {            if (text != this.text && (this.text == null ||                                      !this.text.equals(text))) {                this.text = text;                LabelPeer peer = (LabelPeer)this.peer;                if (peer != null) {                    peer.setText(text);                }                testvalid = true;            }        }         // This could change the preferred size of the Component.        if (testvalid) {            invalidateIfValid();        }    }     /**     * Returns a string representing the state of this <code>Label</code>.     * 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</code>.     *     * @return     the parameter string of this label     */    protected String paramString() {        String str = ",align=";        switch (alignment) {          case LEFT:   str += "left"; break;          case CENTER: str += "center"; break;          case RIGHT:  str += "right"; break;        }        return super.paramString() + str + ",text=" + text;    }     /**     * Initialize JNI field and method IDs     */    private static native void initIDs();  /////////////////// Accessibility support////////////////      /**     * Gets the AccessibleContext associated with this Label.     * For labels, the AccessibleContext takes the form of an     * AccessibleAWTLabel.     * A new AccessibleAWTLabel instance is created if necessary.     *     * @return an AccessibleAWTLabel that serves as the     *         AccessibleContext of this Label     * @since 1.3     */    public AccessibleContext getAccessibleContext() {        if (accessibleContext == null) {            accessibleContext = new AccessibleAWTLabel();        }        return accessibleContext;    }     /**     * This class implements accessibility support for the     * <code>Label</code> class.  It provides an implementation of the     * Java Accessibility API appropriate to label user-interface elements.     * @since 1.3     */    protected class AccessibleAWTLabel extends AccessibleAWTComponent    {        /*         * JDK 1.3 serialVersionUID         */        private static final long serialVersionUID = -3568967560160480438L;         public AccessibleAWTLabel() {            super();        }         /**         * Get the accessible name of this object.         *         * @return the localized name of the object -- can be null if this         * object does not have a name         * @see AccessibleContext#setAccessibleName         */        public String getAccessibleName() {            if (accessibleName != null) {                return accessibleName;            } else {                if (getText() == null) {                    return super.getAccessibleName();                } else {                    return getText();                }            }        }         /**         * Get the role of this object.         *         * @return an instance of AccessibleRole describing the role of the object         * @see AccessibleRole         */        public AccessibleRole getAccessibleRole() {            return AccessibleRole.LABEL;        }     } // inner class AccessibleAWTLabel }