jdk/src/share/classes/javax/swing/JSeparator.java
changeset 2 90ce3da70b43
child 5506 202f599c92aa
equal deleted inserted replaced
0:fd16c54261b3 2:90ce3da70b43
       
     1 /*
       
     2  * Copyright 1997-2006 Sun Microsystems, Inc.  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.  Sun designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    22  * CA 95054 USA or visit www.sun.com if you need additional information or
       
    23  * have any questions.
       
    24  */
       
    25 
       
    26 package javax.swing;
       
    27 
       
    28 import javax.swing.plaf.*;
       
    29 import javax.accessibility.*;
       
    30 
       
    31 import java.io.ObjectOutputStream;
       
    32 import java.io.ObjectInputStream;
       
    33 import java.io.IOException;
       
    34 
       
    35 
       
    36 /**
       
    37  * <code>JSeparator</code> provides a general purpose component for
       
    38  * implementing divider lines - most commonly used as a divider
       
    39  * between menu items that breaks them up into logical groupings.
       
    40  * Instead of using <code>JSeparator</code> directly,
       
    41  * you can use the <code>JMenu</code> or <code>JPopupMenu</code>
       
    42  * <code>addSeparator</code> method to create and add a separator.
       
    43  * <code>JSeparator</code>s may also be used elsewhere in a GUI
       
    44  * wherever a visual divider is useful.
       
    45  *
       
    46  * <p>
       
    47  *
       
    48  * For more information and examples see
       
    49  * <a
       
    50  href="http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
       
    51  * a section in <em>The Java Tutorial.</em>
       
    52  * <p>
       
    53  * <strong>Warning:</strong> Swing is not thread safe. For more
       
    54  * information see <a
       
    55  * href="package-summary.html#threading">Swing's Threading
       
    56  * Policy</a>.
       
    57  * <p>
       
    58  * <strong>Warning:</strong>
       
    59  * Serialized objects of this class will not be compatible with
       
    60  * future Swing releases. The current serialization support is
       
    61  * appropriate for short term storage or RMI between applications running
       
    62  * the same version of Swing.  As of 1.4, support for long term storage
       
    63  * of all JavaBeans<sup><font size="-2">TM</font></sup>
       
    64  * has been added to the <code>java.beans</code> package.
       
    65  * Please see {@link java.beans.XMLEncoder}.
       
    66  *
       
    67  * @beaninfo
       
    68  *      attribute: isContainer false
       
    69  *    description: A divider between menu items.
       
    70  *
       
    71  * @author Georges Saab
       
    72  * @author Jeff Shapiro
       
    73  */
       
    74 public class JSeparator extends JComponent implements SwingConstants, Accessible
       
    75 {
       
    76     /**
       
    77      * @see #getUIClassID
       
    78      * @see #readObject
       
    79      */
       
    80     private static final String uiClassID = "SeparatorUI";
       
    81 
       
    82     private int orientation = HORIZONTAL;
       
    83 
       
    84     /** Creates a new horizontal separator. */
       
    85     public JSeparator()
       
    86     {
       
    87         this( HORIZONTAL );
       
    88     }
       
    89 
       
    90     /**
       
    91      * Creates a new separator with the specified horizontal or
       
    92      * vertical orientation.
       
    93      *
       
    94      * @param orientation an integer specifying
       
    95      *          <code>SwingConstants.HORIZONTAL</code> or
       
    96      *          <code>SwingConstants.VERTICAL</code>
       
    97      * @exception IllegalArgumentException if <code>orientation</code>
       
    98      *          is neither <code>SwingConstants.HORIZONTAL</code> nor
       
    99      *          <code>SwingConstants.VERTICAL</code>
       
   100      */
       
   101     public JSeparator( int orientation )
       
   102     {
       
   103         checkOrientation( orientation );
       
   104         this.orientation = orientation;
       
   105         setFocusable(false);
       
   106         updateUI();
       
   107     }
       
   108 
       
   109     /**
       
   110      * Returns the L&F object that renders this component.
       
   111      *
       
   112      * @return the SeparatorUI object that renders this component
       
   113      */
       
   114     public SeparatorUI getUI() {
       
   115         return (SeparatorUI)ui;
       
   116     }
       
   117 
       
   118     /**
       
   119      * Sets the L&F object that renders this component.
       
   120      *
       
   121      * @param ui  the SeparatorUI L&F object
       
   122      * @see UIDefaults#getUI
       
   123      * @beaninfo
       
   124      *        bound: true
       
   125      *       hidden: true
       
   126      *    attribute: visualUpdate true
       
   127      *  description: The UI object that implements the Component's LookAndFeel.
       
   128      */
       
   129     public void setUI(SeparatorUI ui) {
       
   130         super.setUI(ui);
       
   131     }
       
   132 
       
   133     /**
       
   134      * Resets the UI property to a value from the current look and feel.
       
   135      *
       
   136      * @see JComponent#updateUI
       
   137      */
       
   138     public void updateUI() {
       
   139         setUI((SeparatorUI)UIManager.getUI(this));
       
   140     }
       
   141 
       
   142 
       
   143     /**
       
   144      * Returns the name of the L&F class that renders this component.
       
   145      *
       
   146      * @return the string "SeparatorUI"
       
   147      * @see JComponent#getUIClassID
       
   148      * @see UIDefaults#getUI
       
   149      */
       
   150     public String getUIClassID() {
       
   151         return uiClassID;
       
   152     }
       
   153 
       
   154 
       
   155     /**
       
   156      * See <code>readObject</code> and <code>writeObject</code> in
       
   157      * <code>JComponent</code> for more
       
   158      * information about serialization in Swing.
       
   159      */
       
   160     private void writeObject(ObjectOutputStream s) throws IOException {
       
   161         s.defaultWriteObject();
       
   162         if (getUIClassID().equals(uiClassID)) {
       
   163             byte count = JComponent.getWriteObjCounter(this);
       
   164             JComponent.setWriteObjCounter(this, --count);
       
   165             if (count == 0 && ui != null) {
       
   166                 ui.installUI(this);
       
   167             }
       
   168         }
       
   169     }
       
   170 
       
   171     /**
       
   172      * Returns the orientation of this separator.
       
   173      *
       
   174      * @return   The value of the orientation property, one of the
       
   175      *           following constants defined in <code>SwingConstants</code>:
       
   176      *           <code>VERTICAL</code>, or
       
   177      *           <code>HORIZONTAL</code>.
       
   178      *
       
   179      * @see SwingConstants
       
   180      * @see #setOrientation
       
   181      */
       
   182     public int getOrientation() {
       
   183         return this.orientation;
       
   184     }
       
   185 
       
   186     /**
       
   187      * Sets the orientation of the separator.
       
   188      * The default value of this property is HORIZONTAL.
       
   189      * @param orientation  either <code>SwingConstants.HORIZONTAL</code>
       
   190      *                  or <code>SwingConstants.VERTICAL</code>
       
   191      * @exception IllegalArgumentException  if <code>orientation</code>
       
   192      *          is neither <code>SwingConstants.HORIZONTAL</code>
       
   193      *          nor <code>SwingConstants.VERTICAL</code>
       
   194      *
       
   195      * @see SwingConstants
       
   196      * @see #getOrientation
       
   197      * @beaninfo
       
   198      *        bound: true
       
   199      *    preferred: true
       
   200      *         enum: HORIZONTAL SwingConstants.HORIZONTAL
       
   201      *               VERTICAL   SwingConstants.VERTICAL
       
   202      *    attribute: visualUpdate true
       
   203      *  description: The orientation of the separator.
       
   204      */
       
   205     public void setOrientation( int orientation ) {
       
   206         if (this.orientation == orientation) {
       
   207             return;
       
   208         }
       
   209         int oldValue = this.orientation;
       
   210         checkOrientation( orientation );
       
   211         this.orientation = orientation;
       
   212         firePropertyChange("orientation", oldValue, orientation);
       
   213         revalidate();
       
   214         repaint();
       
   215     }
       
   216 
       
   217     private void checkOrientation( int orientation )
       
   218     {
       
   219         switch ( orientation )
       
   220         {
       
   221             case VERTICAL:
       
   222             case HORIZONTAL:
       
   223                 break;
       
   224             default:
       
   225                 throw new IllegalArgumentException( "orientation must be one of: VERTICAL, HORIZONTAL" );
       
   226         }
       
   227     }
       
   228 
       
   229 
       
   230     /**
       
   231      * Returns a string representation of this <code>JSeparator</code>.
       
   232      * This method
       
   233      * is intended to be used only for debugging purposes, and the
       
   234      * content and format of the returned string may vary between
       
   235      * implementations. The returned string may be empty but may not
       
   236      * be <code>null</code>.
       
   237      *
       
   238      * @return  a string representation of this <code>JSeparator</code>
       
   239      */
       
   240     protected String paramString() {
       
   241         String orientationString = (orientation == HORIZONTAL ?
       
   242                                     "HORIZONTAL" : "VERTICAL");
       
   243 
       
   244         return super.paramString() +
       
   245         ",orientation=" + orientationString;
       
   246     }
       
   247 
       
   248 /////////////////
       
   249 // Accessibility support
       
   250 ////////////////
       
   251 
       
   252     /**
       
   253      * Gets the AccessibleContext associated with this JSeparator.
       
   254      * For separators, the AccessibleContext takes the form of an
       
   255      * AccessibleJSeparator.
       
   256      * A new AccessibleJSeparator instance is created if necessary.
       
   257      *
       
   258      * @return an AccessibleJSeparator that serves as the
       
   259      *         AccessibleContext of this JSeparator
       
   260      */
       
   261     public AccessibleContext getAccessibleContext() {
       
   262         if (accessibleContext == null) {
       
   263             accessibleContext = new AccessibleJSeparator();
       
   264         }
       
   265         return accessibleContext;
       
   266     }
       
   267 
       
   268     /**
       
   269      * This class implements accessibility support for the
       
   270      * <code>JSeparator</code> class.  It provides an implementation of the
       
   271      * Java Accessibility API appropriate to separator user-interface elements.
       
   272      * <p>
       
   273      * <strong>Warning:</strong>
       
   274      * Serialized objects of this class will not be compatible with
       
   275      * future Swing releases. The current serialization support is
       
   276      * appropriate for short term storage or RMI between applications running
       
   277      * the same version of Swing.  As of 1.4, support for long term storage
       
   278      * of all JavaBeans<sup><font size="-2">TM</font></sup>
       
   279      * has been added to the <code>java.beans</code> package.
       
   280      * Please see {@link java.beans.XMLEncoder}.
       
   281      */
       
   282     protected class AccessibleJSeparator extends AccessibleJComponent {
       
   283 
       
   284         /**
       
   285          * Get the role of this object.
       
   286          *
       
   287          * @return an instance of AccessibleRole describing the role of the
       
   288          * object
       
   289          */
       
   290         public AccessibleRole getAccessibleRole() {
       
   291             return AccessibleRole.SEPARATOR;
       
   292         }
       
   293     }
       
   294 }