Source for javax.swing.JRadioButtonMenuItem

   1: /* JRadioButtonMenuItem.java --
   2:    Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
   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 javax.swing;
  40: 
  41: import javax.accessibility.Accessible;
  42: import javax.accessibility.AccessibleContext;
  43: import javax.accessibility.AccessibleRole;
  44: 
  45: /**
  46:  * This class represents JRadioButtonMenuItem. Its behaviour is very similar
  47:  * to JRadioButton. Just like JRadioButton, user can check and uncheck this
  48:  * menu item by clicking on it. JRadioButtonMenuItem uses ToggleButtonModel
  49:  * to keep track of its selection. If the JRadioButtonMenuItem is included in
  50:  * the button group, then only one JRadioButtonMenuItem can be selected at
  51:  * one time.
  52:  */
  53: public class JRadioButtonMenuItem extends JMenuItem implements Accessible
  54: {
  55:   private static final long serialVersionUID = 8482658191548521743L;
  56: 
  57:   /** name for the UI delegate for this radio button menu item. */
  58:   private static final String uiClassID = "RadioButtonMenuItemUI";
  59: 
  60:   /**
  61:    * Creates a new JRadioButtonMenuItem object.
  62:    */
  63:   public JRadioButtonMenuItem()
  64:   {
  65:     this(null, null);
  66:   }
  67: 
  68:   /**
  69:    * Creates a new JRadioButtonMenuItem with specified icon
  70:    *
  71:    * @param icon Icon to be used for this menu item
  72:    */
  73:   public JRadioButtonMenuItem(Icon icon)
  74:   {
  75:     this(null, icon);
  76:   }
  77: 
  78:   /**
  79:    * Creates a new JRadioButtonMenuItem with specified label
  80:    *
  81:    * @param text Label for this menu item
  82:    */
  83:   public JRadioButtonMenuItem(String text)
  84:   {
  85:     this(text, null);
  86:   }
  87: 
  88:   /**
  89:    * Creates a new JRadioButtonMenuItem using specified action
  90:    *
  91:    * @param action Action for this menu item
  92:    */
  93:   public JRadioButtonMenuItem(Action action)
  94:   {
  95:     this();
  96:     setAction(action);
  97:   }
  98: 
  99:   /**
 100:    * Creates a new JRadioButtonMenuItem with specified label and icon
 101:    *
 102:    * @param text Label for this menu item
 103:    * @param icon Icon for this menu item
 104:    */
 105:   public JRadioButtonMenuItem(String text, Icon icon)
 106:   {
 107:     this(text, icon, false);
 108:   }
 109: 
 110:   /**
 111:    * Creates a new JRadioButtonMenuItem with specified label
 112:    * and marked selected if 'selected' is true.
 113:    *
 114:    * @param text Text for this menu item
 115:    * @param selected Selected state of this menu item
 116:    */
 117:   public JRadioButtonMenuItem(String text, boolean selected)
 118:   {
 119:     this(text, null, selected);
 120:   }
 121: 
 122:   /**
 123:    * Creates a new JRadioButtonMenuItem with specified icon
 124:    * and given selected state
 125:    *
 126:    * @param icon Icon for this menu item
 127:    * @param selected Selected state for this menu item
 128:    */
 129:   public JRadioButtonMenuItem(Icon icon, boolean selected)
 130:   {
 131:     this(null, icon, selected);
 132:   }
 133: 
 134:   /**
 135:    * Creates a new JRadioButtonMenuItem with specified label,
 136:    * icon and selected state.
 137:    *
 138:    * @param text Label for this menu item
 139:    * @param icon Icon to be use for this menu item
 140:    * @param selected selected state of this menu item
 141:    */
 142:   public JRadioButtonMenuItem(String text, Icon icon, boolean selected)
 143:   {
 144:     super(text, icon);
 145:     setModel(new JToggleButton.ToggleButtonModel());
 146:     model.setSelected(selected);
 147:     setFocusable(false);
 148:   }
 149: 
 150:   /**
 151:    * This method returns a name to identify which look and feel class will be
 152:    * the UI delegate for the menuItem.
 153:    *
 154:    * @return The Look and Feel classID. "JRadioButtonMenuItemUI"
 155:    */
 156:   public String getUIClassID()
 157:   {
 158:     return uiClassID;
 159:   }
 160: 
 161:   /**
 162:    * This method overrides JComponent.requestFocus with an empty
 163:    * implementation, since JRadioButtonMenuItems should not
 164:    * receve focus in general.
 165:    */
 166:   public void requestFocus()
 167:   {
 168:     //  Should do nothing here
 169:   }
 170: 
 171:   /**
 172:    * Returns a string describing the attributes for the
 173:    * <code>JRadioButtonMenuItem</code> component, for use in debugging.  The
 174:    * return value is guaranteed to be non-<code>null</code>, but the format of
 175:    * the string may vary between implementations.
 176:    *
 177:    * @return A string describing the attributes of the
 178:    *     <code>JRadioButtonMenuItem</code>.
 179:    */
 180:   protected String paramString()
 181:   {
 182:     // calling super seems to be sufficient here...
 183:     return super.paramString();
 184:   }
 185: 
 186:   /**
 187:    * Returns the object that provides accessibility features for this
 188:    * <code>JRadioButtonMenuItem</code> component.
 189:    *
 190:    * @return The accessible context (an instance of
 191:    *     {@link AccessibleJRadioButtonMenuItem}).
 192:    */
 193:   public AccessibleContext getAccessibleContext()
 194:   {
 195:     if (accessibleContext == null)
 196:       accessibleContext = new AccessibleJRadioButtonMenuItem();
 197: 
 198:     return accessibleContext;
 199:   }
 200: 
 201:   /**
 202:    * Provides the accessibility features for the
 203:    * <code>JRadioButtonMenuItem</code> component.
 204:    *
 205:    * @see JRadioButtonMenuItem#getAccessibleContext()
 206:    */
 207:   protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem
 208:   {
 209:     private static final long serialVersionUID = 4381471510145292179L;
 210: 
 211:     /**
 212:      * Creates a new <code>AccessibleJRadioButtonMenuItem</code> instance.
 213:      */
 214:     protected AccessibleJRadioButtonMenuItem()
 215:     {
 216:       // Nothing to do here.
 217:     }
 218: 
 219:     /**
 220:      * Returns the accessible role for the <code>JRadioButtonMenuItem</code>
 221:      * component.
 222:      *
 223:      * @return {@link AccessibleRole#RADIO_BUTTON}.
 224:      */
 225:     public AccessibleRole getAccessibleRole()
 226:     {
 227:       return AccessibleRole.RADIO_BUTTON;
 228:     }
 229:   }
 230: }