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