Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)
Frames | No Frames

Source for java.awt.CheckboxMenuItem

 1:  /* CheckboxMenuItem.java -- A menu option with a checkbox on it.
 2:  Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005 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 java.awt;
 40: 
 41:  import java.awt.event.ItemEvent;
 42:  import java.awt.event.ItemListener;
 43:  import java.awt.peer.CheckboxMenuItemPeer;
 44:  import java.util.EventListener;
 45: 
 46:  import javax.accessibility.Accessible;
 47:  import javax.accessibility.AccessibleAction;
 48:  import javax.accessibility.AccessibleContext;
 49:  import javax.accessibility.AccessibleValue;
 50: 
 51:  /**
 52:  * This class implements a menu item that has a checkbox on it indicating
 53:  * the selected state of some option.
 54:  *
 55:  * @author Aaron M. Renn (arenn@urbanophile.com)
 56:  * @author Tom Tromey (tromey@redhat.com)
 57:  */
 58:  public class CheckboxMenuItem extends MenuItem
 59:  implements ItemSelectable, Accessible
 60: {
 61: 
 62:  /*
 63:  * Static Variables
 64:  */
 65: 
 66:  /**
 67:  * The number used to generate the name returned by getName.
 68:  */
 69:  private static transient long next_chkmenuitem_number;
 70: 
 71:  // Serialization constant
 72:  private static final long serialVersionUID = 6190621106981774043L;
 73: 
 74:  /*
 75:  * Instance Variables
 76:  */
 77: 
 78:  /**
 79:  * @serial The state of the checkbox, with <code>true</code> being on and
 80:  * <code>false</code> being off.
 81:  */
 82:  private boolean state;
 83: 
 84:  // List of registered ItemListeners
 85:  private transient ItemListener item_listeners;
 86: 
 87:  /*************************************************************************/
 88: 
 89:  /*
 90:  * Constructors
 91:  */
 92: 
 93:  /**
 94:  * Initializes a new instance of <code>CheckboxMenuItem</code> with no
 95:  * label and an initial state of off.
 96:  *
 97:  * @exception HeadlessException If GraphicsEnvironment.isHeadless()
 98:  * returns true.
 99:  */
 100:  public
 101:  CheckboxMenuItem()
 102: {
 103:  this("", false);
 104: }
 105: 
 106:  /*************************************************************************/
 107: 
 108:  /**
 109:  * Initializes a new instance of <code>CheckboxMenuItem</code> with the
 110:  * specified label and an initial state of off.
 111:  *
 112:  * @param label The label of the menu item.
 113:  *
 114:  * @exception HeadlessException If GraphicsEnvironment.isHeadless()
 115:  * returns true.
 116:  */
 117:  public
 118:  CheckboxMenuItem(String label)
 119: {
 120:  this(label, false);
 121: }
 122: 
 123:  /*************************************************************************/
 124: 
 125:  /**
 126:  * Initializes a new instance of <code>CheckboxMenuItem</code> with the
 127:  * specified label and initial state.
 128:  *
 129:  * @param label The label of the menu item.
 130:  * @param state The initial state of the menu item, where <code>true</code>
 131:  * is on, and <code>false</code> is off.
 132:  *
 133:  * @exception HeadlessException If GraphicsEnvironment.isHeadless()
 134:  * returns true.
 135:  */
 136:  public
 137:  CheckboxMenuItem(String label, boolean state)
 138: {
 139:  super(label);
 140:  this.state = state;
 141: 
 142:  if (GraphicsEnvironment.isHeadless())
 143:  throw new HeadlessException ();
 144: }
 145: 
 146:  /*************************************************************************/
 147: 
 148:  /*
 149:  * Instance Methods
 150:  */
 151: 
 152:  /**
 153:  * Returns the state of this menu item.
 154:  *
 155:  * @return The state of this menu item.
 156:  */
 157:  public boolean
 158:  getState()
 159: {
 160:  return(state);
 161: }
 162: 
 163:  /*************************************************************************/
 164: 
 165:  /**
 166:  * Sets the state of this menu item.
 167:  *
 168:  * @param state The initial state of the menu item, where <code>true</code>
 169:  * is on, and <code>false</code> is off.
 170:  */
 171:  public synchronized void
 172:  setState(boolean state)
 173: {
 174:  this.state = state;
 175:  if (peer != null)
 176:  {
 177:  CheckboxMenuItemPeer cp = (CheckboxMenuItemPeer) peer;
 178:  cp.setState (state);
 179:  }
 180: }
 181: 
 182:  /*************************************************************************/
 183: 
 184:  /**
 185:  * Returns an array of length 1 with the menu item label for this object
 186:  * if the state is on. Otherwise <code>null</code> is returned.
 187:  *
 188:  * @return An array with this menu item's label if it has a state of on,
 189:  * or <code>null</code> otherwise.
 190:  */
 191:  public Object[]
 192:  getSelectedObjects()
 193: {
 194:  if (state == false)
 195:  return(null);
 196: 
 197:  Object[] obj = new Object[1];
 198:  obj[0] = getLabel();
 199: 
 200:  return(obj);
 201: }
 202: 
 203:  /*************************************************************************/
 204: 
 205:  /**
 206:  * Create's this object's native peer
 207:  */
 208:  public synchronized void
 209:  addNotify()
 210: {
 211:  if (peer == null)
 212:  peer = getToolkit().createCheckboxMenuItem(this);
 213: 
 214:  super.addNotify ();
 215: }
 216: 
 217:  /*************************************************************************/
 218: 
 219:  /**
 220:  * Adds the specified listener to the list of registered item listeners
 221:  * for this object.
 222:  *
 223:  * @param listener The listener to add.
 224:  */
 225:  public synchronized void
 226:  addItemListener(ItemListener listener)
 227: {
 228:  item_listeners = AWTEventMulticaster.add(item_listeners, listener);
 229: 
 230:  enableEvents(AWTEvent.ITEM_EVENT_MASK);
 231: }
 232: 
 233:  /*************************************************************************/
 234: 
 235:  /**
 236:  * Removes the specified listener from the list of registered item
 237:  * listeners for this object.
 238:  *
 239:  * @param listener The listener to remove.
 240:  */
 241:  public synchronized void
 242:  removeItemListener(ItemListener listener)
 243: {
 244:  item_listeners = AWTEventMulticaster.remove(item_listeners, listener);
 245: }
 246: 
 247:  /*************************************************************************/
 248: 
 249:  /**
 250:  * Processes the specified event by calling <code>processItemEvent()</code>
 251:  * if it is an instance of <code>ItemEvent</code> or calling the superclass
 252:  * method otherwise.
 253:  *
 254:  * @param event The event to process.
 255:  */
 256:  protected void
 257:  processEvent(AWTEvent event)
 258: {
 259:  if (event instanceof ItemEvent)
 260:  processItemEvent((ItemEvent)event);
 261:  else
 262:  super.processEvent(event);
 263: }
 264: 
 265:  /*************************************************************************/
 266: 
 267:  /**
 268:  * Processes the specified event by dispatching it to any registered listeners.
 269:  *
 270:  * @param event The event to process.
 271:  */
 272:  protected void
 273:  processItemEvent(ItemEvent event)
 274: {
 275:  if (item_listeners != null)
 276:  item_listeners.itemStateChanged(event);
 277: }
 278: 
 279:  void
 280:  dispatchEventImpl(AWTEvent e)
 281: {
 282:  if (e instanceof ItemEvent)
 283:  {
 284:  synchronized (this)
 285:  {
 286:  state = (((ItemEvent) e).getStateChange() == ItemEvent.SELECTED);
 287:  }
 288:  }
 289: 
 290:  if (e.id <= ItemEvent.ITEM_LAST 
 291:  && e.id >= ItemEvent.ITEM_FIRST
 292:  && (item_listeners != null 
 293:  || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
 294:  processEvent(e);
 295:  else
 296:  super.dispatchEventImpl(e);
 297: }
 298: 
 299:  /*************************************************************************/
 300: 
 301:  /**
 302:  * Returns a debugging string for this object.
 303:  *
 304:  * @return A debugging string for this object.
 305:  */
 306:  public String
 307:  paramString()
 308: {
 309:  return ("label=" + getLabel() + ",state=" + state
 310:  + "," + super.paramString());
 311: }
 312: 
 313:  /**
 314:  * Returns an array of all the objects currently registered as FooListeners
 315:  * upon this <code>CheckboxMenuItem</code>. FooListeners are registered using
 316:  * the addFooListener method.
 317:  *
 318:  * @exception ClassCastException If listenerType doesn't specify a class or
 319:  * interface that implements java.util.EventListener.
 320:  */
 321:  public <T extends EventListener> T[] getListeners (Class<T> listenerType)
 322:  {
 323:  if (listenerType == ItemListener.class)
 324:  return AWTEventMulticaster.getListeners (item_listeners, listenerType); 
 325: 
 326:  return super.getListeners (listenerType);
 327:  }
 328: 
 329:  /**
 330:  * Returns an aray of all item listeners currently registered to this
 331:  * <code>CheckBoxMenuItem</code>.
 332:  */
 333:  public ItemListener[] getItemListeners ()
 334:  {
 335:  return (ItemListener[]) getListeners (ItemListener.class);
 336:  }
 337: 
 338: 
 339:  protected class AccessibleAWTCheckboxMenuItem extends AccessibleAWTMenuItem
 340:  implements AccessibleAction, AccessibleValue
 341:  {
 342:  // I think the base class provides the necessary implementation
 343:  
 344:  private static final long serialVersionUID = -1122642964303476L;
 345:  }
 346:  
 347:  /**
 348:  * Gets the AccessibleContext associated with this <code>CheckboxMenuItem</code>.
 349:  * The context is created, if necessary.
 350:  *
 351:  * @return the associated context
 352:  */
 353:  public AccessibleContext getAccessibleContext()
 354:  {
 355:  /* Create the context if this is the first request */
 356:  if (accessibleContext == null)
 357:  accessibleContext = new AccessibleAWTCheckboxMenuItem();
 358:  return accessibleContext;
 359:  }
 360:  
 361:  /**
 362:  * Generate a unique name for this <code>CheckboxMenuItem</code>.
 363:  *
 364:  * @return A unique name for this <code>CheckboxMenuItem</code>.
 365:  */
 366:  String generateName()
 367:  {
 368:  return "chkmenuitem" + getUniqueLong();
 369:  }
 370: 
 371:  private static synchronized long getUniqueLong()
 372:  {
 373:  return next_chkmenuitem_number++;
 374:  }
 375: 
 376: } // class CheckboxMenuItem
Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)

AltStyle によって変換されたページ (->オリジナル) /