JCheckBoxMenuItem.java 7.84 KB
Newer Older
Tom Tromey committed
1
/* JCheckBoxMenuItem.java --
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
 Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.

 This file is part of GNU Classpath.

 GNU Classpath is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.

 GNU Classpath 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 for more details.

 You should have received a copy of the GNU General Public License
 along with GNU Classpath; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 02110-1301 USA.

 Linking this library statically or dynamically with other modules is
 making a combined work based on this library.  Thus, the terms and
 conditions of the GNU General Public License cover the whole
 combination.

 As a special exception, the copyright holders of this library give you
 permission to link this library with independent modules to produce an
 executable, regardless of the license terms of these independent
 modules, and to copy and distribute the resulting executable under
 terms of your choice, provided that you also meet, for each linked
 independent module, the terms and conditions of the license of that
 module.  An independent module is a module which is not derived from
 or based on this library.  If you modify this library, you may extend
 this exception to your version of the library, but you are not
 obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version. */
Tom Tromey committed
37 38 39 40 41 42 43 44 45


package javax.swing;

import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;

/**
46 47
 * A menu item that displays a checkbox. Its behaviour is very similar to
 * {@link JCheckBox}. Just like the <code>JCheckBox</code>, user can check
48
 * and uncheck this menu item by clicking on it. Also
49 50
 * {@link AbstractButton#setSelected} and {@link #setState} can be use used for
 * the same purpose. <code>JCheckBoxMenuItem</code> uses
Tom Tromey committed
51
 * <code>ToggleButtonModel</code> to keep track of its selection.
52
 * 
Tom Tromey committed
53
 * @author original author unknown
Tom Tromey committed
54
 */
55 56 57
public class JCheckBoxMenuItem
    extends JMenuItem
    implements SwingConstants, Accessible
Tom Tromey committed
58
{
59
  private static final long serialVersionUID = - 6676402307973384715L;
Tom Tromey committed
60 61 62 63 64 65 66 67

  /** name for the UI delegate for this menuItem. */
  private static final String uiClassID = "CheckBoxMenuItemUI";

  /** Indicates whether this menu item is checked. */
  private boolean state;

  /**
68 69
   * This array contains text of this menu item if this menu item is in checked
   * state and null it is not.
Tom Tromey committed
70 71 72 73 74 75 76 77 78 79 80 81 82
   */
  private Object[] selectedObjects = new Object[1];

  /**
   * Creates a new JCheckBoxMenuItem object.
   */
  public JCheckBoxMenuItem()
  {
    this(null, null);
  }

  /**
   * Creates a new JCheckBoxMenuItem with given icon
83
   * 
Tom Tromey committed
84 85 86 87 88 89 90 91 92
   * @param icon Icon for this menu item
   */
  public JCheckBoxMenuItem(Icon icon)
  {
    this(null, icon);
  }

  /**
   * Creates a new JCheckBoxMenuItem with given label
93
   * 
Tom Tromey committed
94 95 96 97 98 99 100 101 102
   * @param text Label for this menu item
   */
  public JCheckBoxMenuItem(String text)
  {
    this(text, null);
  }

  /**
   * Creates a new JCheckBoxMenuItem using given action
103
   * 
Tom Tromey committed
104 105 106 107 108 109 110 111 112 113
   * @param action Action for this menu item.
   */
  public JCheckBoxMenuItem(Action action)
  {
    this();
    setAction(action);
  }

  /**
   * Creates a new JCheckBoxMenuItem object with given label and icon
114
   * 
Tom Tromey committed
115 116 117 118 119 120 121 122 123
   * @param text Label for this menu item
   * @param icon Icon for this menu item
   */
  public JCheckBoxMenuItem(String text, Icon icon)
  {
    this(text, icon, false);
  }

  /**
124 125 126
   * Creates a new JCheckBoxMenuItem object using specified label and marked as
   * checked if given 'state' is true.
   * 
Tom Tromey committed
127
   * @param text Label for this menu item
128 129
   * @param state <code>true</code> if this item should be in checked state
   *          and <code>false</code> otherwise
Tom Tromey committed
130 131 132 133 134 135 136
   */
  public JCheckBoxMenuItem(String text, boolean state)
  {
    this(text, null, state);
  }

  /**
137 138 139
   * Creates a new JCheckBoxMenuItem object with given label, icon, and marked
   * as checked if given 'state' is true.
   * 
Tom Tromey committed
140 141
   * @param text Label for this menu item
   * @param icon icon for this menu item
142 143
   * @param state <code>true</code> if this item should be in checked state
   *          and false otherwise
Tom Tromey committed
144 145 146 147 148 149
   */
  public JCheckBoxMenuItem(String text, Icon icon, boolean state)
  {
    super(text, icon);
    setModel(new JToggleButton.ToggleButtonModel());
    this.state = state;
150 151 152
    if (state == true)
      this.setSelected(true);
    setFocusable(false);
Tom Tromey committed
153 154 155 156 157
  }

  /**
   * This method returns a name to identify which look and feel class will be
   * the UI delegate for the menuItem.
158
   * 
Tom Tromey committed
159 160 161 162 163 164 165 166 167
   * @return The Look and Feel classID. "JCheckBoxMenuItemUI"
   */
  public String getUIClassID()
  {
    return uiClassID;
  }

  /**
   * Returns checked state for this check box menu item.
168 169 170
   * 
   * @return Returns true if this menu item is in checked state and false
   *         otherwise.
Tom Tromey committed
171 172 173 174 175 176 177
   */
  public boolean getState()
  {
    return state;
  }

  /**
178 179 180
   * Sets state for this check box menu item. If given 'state' is true, then
   * mark menu item as checked, and uncheck this menu item otherwise.
   * 
Tom Tromey committed
181 182 183 184 185 186 187 188
   * @param state new state for this menu item
   */
  public synchronized void setState(boolean state)
  {
    this.state = state;
  }

  /**
189 190 191 192 193
   * This method returns array containing label of this menu item if it is
   * selected and null otherwise.
   * 
   * @return Array containing label of this menu item if this menu item is
   *         selected or null otherwise.
Tom Tromey committed
194 195 196 197 198 199 200 201 202 203 204 205
   */
  public Object[] getSelectedObjects()
  {
    if (state == true)
      selectedObjects[0] = this.getText();
    else
      selectedObjects[0] = null;

    return selectedObjects;
  }

  /**
206 207 208
   * This method overrides JComponent.requestFocus with an empty implementation,
   * since JCheckBoxMenuItems should not receive focus in general.
   */
Tom Tromey committed
209 210
  public void requestFocus()
  {
211
    // Should do nothing here
Tom Tromey committed
212 213 214
  }

  /**
215 216 217
   * Returns a string describing the attributes for the
   * <code>JCheckBoxMenuItem</code> component, for use in debugging. The
   * return value is guaranteed to be non-<code>null</code>, but the format
218
   * of the string may vary between implementations.
219 220 221
   * 
   * @return A string describing the attributes of the
   *         <code>JCheckBoxMenuItem</code>.
Tom Tromey committed
222 223 224
   */
  protected String paramString()
  {
225
    // calling super seems to be sufficient to match the reference
226 227
    // implementation here...
    return super.paramString();
Tom Tromey committed
228 229
  }

230 231 232
  /**
   * Returns the object that provides accessibility features for this
   * <code>JCheckBoxMenuItem</code> component.
233 234 235
   * 
   * @return The accessible context (an instance of
   *         {@link AccessibleJCheckBoxMenuItem}).
236
   */
Tom Tromey committed
237 238 239 240 241 242 243 244
  public AccessibleContext getAccessibleContext()
  {
    if (accessibleContext == null)
      accessibleContext = new AccessibleJCheckBoxMenuItem();

    return accessibleContext;
  }

Tom Tromey committed
245
  /**
246
   * Provides the accessibility features for the <code>JCheckBoxMenuItem</code>
247 248 249
   * component.
   * 
   * @see JCheckBoxMenuItem#getAccessibleContext()
Tom Tromey committed
250
   */
251 252
  protected class AccessibleJCheckBoxMenuItem
      extends AccessibleJMenuItem
Tom Tromey committed
253 254 255 256
  {
    private static final long serialVersionUID = 1079958073579370777L;

    /**
257
     * Creates a new <code>AccessibleJCheckBoxMenuItem</code> instance.
Tom Tromey committed
258 259 260
     */
    protected AccessibleJCheckBoxMenuItem()
    {
261
      // Nothing to do here.
Tom Tromey committed
262 263
    }

264
    /**
265
     * Returns the accessible role for the <code>JCheckBoxMenuItem</code>
266
     * component.
267
     * 
268 269
     * @return {@link AccessibleRole#CHECK_BOX}.
     */
Tom Tromey committed
270 271 272 273 274 275
    public AccessibleRole getAccessibleRole()
    {
      return AccessibleRole.CHECK_BOX;
    }
  }
}