001 /*
002 * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 package java.awt;
026
027 import java.awt.peer.CheckboxPeer;
028 import java.awt.event.*;
029 import java.util.EventListener;
030 import java.io.ObjectOutputStream;
031 import java.io.ObjectInputStream;
032 import java.io.IOException;
033 import javax.accessibility.*;
034
035 /**
036 * A check box is a graphical component that can be in either an
037 * "on" (<code>true</code>) or "off" (<code>false</code>) state.
038 * Clicking on a check box changes its state from
039 * "on" to "off," or from "off" to "on."
040 * <p>
041 * The following code example creates a set of check boxes in
042 * a grid layout:
043 * <p>
044 * <hr><blockquote><pre>
045 * setLayout(new GridLayout(3, 1));
046 * add(new Checkbox("one", null, true));
047 * add(new Checkbox("two"));
048 * add(new Checkbox("three"));
049 * </pre></blockquote><hr>
050 * <p>
051 * This image depicts the check boxes and grid layout
052 * created by this code example:
053 * <p>
054 * <img src="doc-files/Checkbox-1.gif" alt="The following context describes the graphic."
055 * ALIGN=center HSPACE=10 VSPACE=7>
056 * <p>
057 * The button labeled <code>one</code> is in the "on" state, and the
058 * other two are in the "off" state. In this example, which uses the
059 * <code>GridLayout</code> class, the states of the three check
060 * boxes are set independently.
061 * <p>
062 * Alternatively, several check boxes can be grouped together under
063 * the control of a single object, using the
064 * <code>CheckboxGroup</code> class.
065 * In a check box group, at most one button can be in the "on"
066 * state at any given time. Clicking on a check box to turn it on
067 * forces any other check box in the same group that is on
068 * into the "off" state.
069 *
070 * @version 1.95 05/05/07
071 * @author Sami Shaio
072 * @see java.awt.GridLayout
073 * @see java.awt.CheckboxGroup
074 * @since JDK1.0
075 */
076 public class Checkbox extends Component implements ItemSelectable,
077 Accessible {
078
079 static {
080 /* ensure that the necessary native libraries are loaded */
081 Toolkit.loadLibraries();
082 if (!GraphicsEnvironment.isHeadless()) {
083 initIDs();
084 }
085 }
086
087 /**
088 * The label of the Checkbox.
089 * This field can be null.
090 * @serial
091 * @see #getLabel()
092 * @see #setLabel(String)
093 */
094 String label;
095
096 /**
097 * The state of the <code>Checkbox</code>.
098 * @serial
099 * @see #getState()
100 * @see #setState(boolean)
101 */
102 boolean state;
103
104 /**
105 * The check box group.
106 * This field can be null indicating that the checkbox
107 * is not a group checkbox.
108 * @serial
109 * @see #getCheckboxGroup()
110 * @see #setCheckboxGroup(CheckboxGroup)
111 */
112 CheckboxGroup group;
113
114 transient ItemListener itemListener;
115
116 private static final String base = "checkbox";
117 private static int nameCounter = 0;
118
119 /*
120 * JDK 1.1 serialVersionUID
121 */
122 private static final long serialVersionUID = 7270714317450821763L;
123
124 /**
125 * Helper function for setState and CheckboxGroup.setSelectedCheckbox
126 * Should remain package-private.
127 */
128 void setStateInternal(boolean state) {
129 this .state = state;
130 CheckboxPeer peer = (CheckboxPeer) this .peer;
131 if (peer != null) {
132 peer.setState(state);
133 }
134 }
135
136 /**
137 * Creates a check box with an empty string for its label.
138 * The state of this check box is set to "off," and it is not
139 * part of any check box group.
140 * @exception HeadlessException if GraphicsEnvironment.isHeadless()
141 * returns true
142 * @see java.awt.GraphicsEnvironment#isHeadless
143 */
144 public Checkbox() throws HeadlessException {
145 this ("", false, null);
146 }
147
148 /**
149 * Creates a check box with the specified label. The state
150 * of this check box is set to "off," and it is not part of
151 * any check box group.
152 *
153 * @param label a string label for this check box,
154 * or <code>null</code> for no label.
155 * @exception HeadlessException if
156 * <code>GraphicsEnvironment.isHeadless</code>
157 * returns <code>true</code>
158 * @see java.awt.GraphicsEnvironment#isHeadless
159 */
160 public Checkbox(String label) throws HeadlessException {
161 this (label, false, null);
162 }
163
164 /**
165 * Creates a check box with the specified label
166 * and sets the specified state.
167 * This check box is not part of any check box group.
168 *
169 * @param label a string label for this check box,
170 * or <code>null</code> for no label
171 * @param state the initial state of this check box
172 * @exception HeadlessException if
173 * <code>GraphicsEnvironment.isHeadless</code>
174 * returns <code>true</code>
175 * @see java.awt.GraphicsEnvironment#isHeadless
176 */
177 public Checkbox(String label, boolean state)
178 throws HeadlessException {
179 this (label, state, null);
180 }
181
182 /**
183 * Constructs a Checkbox with the specified label, set to the
184 * specified state, and in the specified check box group.
185 *
186 * @param label a string label for this check box,
187 * or <code>null</code> for no label.
188 * @param state the initial state of this check box.
189 * @param group a check box group for this check box,
190 * or <code>null</code> for no group.
191 * @exception HeadlessException if
192 * <code>GraphicsEnvironment.isHeadless</code>
193 * returns <code>true</code>
194 * @see java.awt.GraphicsEnvironment#isHeadless
195 * @since JDK1.1
196 */
197 public Checkbox(String label, boolean state, CheckboxGroup group)
198 throws HeadlessException {
199 GraphicsEnvironment.checkHeadless();
200 this .label = label;
201 this .state = state;
202 this .group = group;
203 if (state && (group != null)) {
204 group.setSelectedCheckbox(this );
205 }
206 }
207
208 /**
209 * Creates a check box with the specified label, in the specified
210 * check box group, and set to the specified state.
211 *
212 * @param label a string label for this check box,
213 * or <code>null</code> for no label.
214 * @param group a check box group for this check box,
215 * or <code>null</code> for no group.
216 * @param state the initial state of this check box.
217 * @exception HeadlessException if
218 * <code>GraphicsEnvironment.isHeadless</code>
219 * returns <code>true</code>
220 * @see java.awt.GraphicsEnvironment#isHeadless
221 * @since JDK1.1
222 */
223 public Checkbox(String label, CheckboxGroup group, boolean state)
224 throws HeadlessException {
225 this (label, state, group);
226 }
227
228 /**
229 * Constructs a name for this component. Called by
230 * <code>getName</code> when the name is <code>null</code>.
231 *
232 * @return a name for this component
233 */
234 String constructComponentName() {
235 synchronized (Checkbox.class) {
236 return base + nameCounter++;
237 }
238 }
239
240 /**
241 * Creates the peer of the Checkbox. The peer allows you to change the
242 * look of the Checkbox without changing its functionality.
243 *
244 * @see java.awt.Toolkit#createCheckbox(java.awt.Checkbox)
245 * @see java.awt.Component#getToolkit()
246 */
247 public void addNotify() {
248 synchronized (getTreeLock()) {
249 if (peer == null)
250 peer = getToolkit().createCheckbox(this );
251 super .addNotify();
252 }
253 }
254
255 /**
256 * Gets the label of this check box.
257 *
258 * @return the label of this check box, or <code>null</code>
259 * if this check box has no label.
260 * @see #setLabel(String)
261 */
262 public String getLabel() {
263 return label;
264 }
265
266 /**
267 * Sets this check box's label to be the string argument.
268 *
269 * @param label a string to set as the new label, or
270 * <code>null</code> for no label.
271 * @see #getLabel
272 */
273 public void setLabel(String label) {
274 boolean testvalid = false;
275
276 synchronized (this ) {
277 if (label != this .label
278 && (this .label == null || !this .label.equals(label))) {
279 this .label = label;
280 CheckboxPeer peer = (CheckboxPeer) this .peer;
281 if (peer != null) {
282 peer.setLabel(label);
283 }
284 testvalid = true;
285 }
286 }
287
288 // This could change the preferred size of the Component.
289 if (testvalid && valid) {
290 invalidate();
291 }
292 }
293
294 /**
295 * Determines whether this check box is in the "on" or "off" state.
296 * The boolean value <code>true</code> indicates the "on" state,
297 * and <code>false</code> indicates the "off" state.
298 *
299 * @return the state of this check box, as a boolean value
300 * @see #setState
301 */
302 public boolean getState() {
303 return state;
304 }
305
306 /**
307 * Sets the state of this check box to the specified state.
308 * The boolean value <code>true</code> indicates the "on" state,
309 * and <code>false</code> indicates the "off" state.
310 *
311 * <p>Note that this method should be primarily used to
312 * initialize the state of the checkbox. Programmatically
313 * setting the state of the checkbox will <i>not</i> trigger
314 * an <code>ItemEvent</code>. The only way to trigger an
315 * <code>ItemEvent</code> is by user interaction.
316 *
317 * @param state the boolean state of the check box
318 * @see #getState
319 */
320 public void setState(boolean state) {
321 /* Cannot hold check box lock when calling group.setSelectedCheckbox. */
322 CheckboxGroup group = this .group;
323 if (group != null) {
324 if (state) {
325 group.setSelectedCheckbox(this );
326 } else if (group.getSelectedCheckbox() == this ) {
327 state = true;
328 }
329 }
330 setStateInternal(state);
331 }
332
333 /**
334 * Returns an array (length 1) containing the checkbox
335 * label or null if the checkbox is not selected.
336 * @see ItemSelectable
337 */
338 public Object[] getSelectedObjects() {
339 if (state) {
340 Object[] items = new Object[1];
341 items[0] = label;
342 return items;
343 }
344 return null;
345 }
346
347 /**
348 * Determines this check box's group.
349 * @return this check box's group, or <code>null</code>
350 * if the check box is not part of a check box group.
351 * @see #setCheckboxGroup(CheckboxGroup)
352 */
353 public CheckboxGroup getCheckboxGroup() {
354 return group;
355 }
356
357 /**
358 * Sets this check box's group to the specified check box group.
359 * If this check box is already in a different check box group,
360 * it is first taken out of that group.
361 * <p>
362 * If the state of this check box is <code>true</code> and the new
363 * group already has a check box selected, this check box's state
364 * is changed to <code>false</code>. If the state of this check
365 * box is <code>true</code> and the new group has no check box
366 * selected, this check box becomes the selected checkbox for
367 * the new group and its state is <code>true</code>.
368 *
369 * @param g the new check box group, or <code>null</code>
370 * to remove this check box from any check box group
371 * @see #getCheckboxGroup
372 */
373 public void setCheckboxGroup(CheckboxGroup g) {
374 CheckboxGroup oldGroup;
375 boolean oldState;
376
377 /* Do nothing if this check box has already belonged
378 * to the check box group g.
379 */
380 if (this .group == g) {
381 return;
382 }
383
384 synchronized (this ) {
385 oldGroup = this .group;
386 oldState = getState();
387
388 this .group = g;
389 CheckboxPeer peer = (CheckboxPeer) this .peer;
390 if (peer != null) {
391 peer.setCheckboxGroup(g);
392 }
393 if (this .group != null && getState()) {
394 if (this .group.getSelectedCheckbox() != null) {
395 setState(false);
396 } else {
397 this .group.setSelectedCheckbox(this );
398 }
399 }
400 }
401
402 /* Locking check box below could cause deadlock with
403 * CheckboxGroup's setSelectedCheckbox method.
404 *
405 * Fix for 4726853 by kdm@sparc.spb.su
406 * Here we should check if this check box was selected
407 * in the previous group and set selected check box to
408 * null for that group if so.
409 */
410 if (oldGroup != null && oldState) {
411 oldGroup.setSelectedCheckbox(null);
412 }
413 }
414
415 /**
416 * Adds the specified item listener to receive item events from
417 * this check box. Item events are sent to listeners in response
418 * to user input, but not in response to calls to setState().
419 * If l is null, no exception is thrown and no action is performed.
420 * <p>Refer to <a href="doc-files/AWTThreadIssues.html#ListenersThreads"
421 * >AWT Threading Issues</a> for details on AWT's threading model.
422 *
423 * @param l the item listener
424 * @see #removeItemListener
425 * @see #getItemListeners
426 * @see #setState
427 * @see java.awt.event.ItemEvent
428 * @see java.awt.event.ItemListener
429 * @since JDK1.1
430 */
431 public synchronized void addItemListener(ItemListener l) {
432 if (l == null) {
433 return;
434 }
435 itemListener = AWTEventMulticaster.add(itemListener, l);
436 newEventsOnly = true;
437 }
438
439 /**
440 * Removes the specified item listener so that the item listener
441 * no longer receives item events from this check box.
442 * If l is null, no exception is thrown and no action is performed.
443 * <p>Refer to <a href="doc-files/AWTThreadIssues.html#ListenersThreads"
444 * >AWT Threading Issues</a> for details on AWT's threading model.
445 *
446 * @param l the item listener
447 * @see #addItemListener
448 * @see #getItemListeners
449 * @see java.awt.event.ItemEvent
450 * @see java.awt.event.ItemListener
451 * @since JDK1.1
452 */
453 public synchronized void removeItemListener(ItemListener l) {
454 if (l == null) {
455 return;
456 }
457 itemListener = AWTEventMulticaster.remove(itemListener, l);
458 }
459
460 /**
461 * Returns an array of all the item listeners
462 * registered on this checkbox.
463 *
464 * @return all of this checkbox's <code>ItemListener</code>s
465 * or an empty array if no item
466 * listeners are currently registered
467 *
468 * @see #addItemListener
469 * @see #removeItemListener
470 * @see java.awt.event.ItemEvent
471 * @see java.awt.event.ItemListener
472 * @since 1.4
473 */
474 public synchronized ItemListener[] getItemListeners() {
475 return (ItemListener[]) (getListeners(ItemListener.class));
476 }
477
478 /**
479 * Returns an array of all the objects currently registered
480 * as <code><em>Foo</em>Listener</code>s
481 * upon this <code>Checkbox</code>.
482 * <code><em>Foo</em>Listener</code>s are registered using the
483 * <code>add<em>Foo</em>Listener</code> method.
484 *
485 * <p>
486 * You can specify the <code>listenerType</code> argument
487 * with a class literal, such as
488 * <code><em>Foo</em>Listener.class</code>.
489 * For example, you can query a
490 * <code>Checkbox</code> <code>c</code>
491 * for its item listeners with the following code:
492 *
493 * <pre>ItemListener[] ils = (ItemListener[])(c.getListeners(ItemListener.class));</pre>
494 *
495 * If no such listeners exist, this method returns an empty array.
496 *
497 * @param listenerType the type of listeners requested; this parameter
498 * should specify an interface that descends from
499 * <code>java.util.EventListener</code>
500 * @return an array of all objects registered as
501 * <code><em>Foo</em>Listener</code>s on this checkbox,
502 * or an empty array if no such
503 * listeners have been added
504 * @exception ClassCastException if <code>listenerType</code>
505 * doesn't specify a class or interface that implements
506 * <code>java.util.EventListener</code>
507 *
508 * @see #getItemListeners
509 * @since 1.3
510 */
511 public <T extends EventListener> T[] getListeners(
512 Class<T> listenerType) {
513 EventListener l = null;
514 if (listenerType == ItemListener.class) {
515 l = itemListener;
516 } else {
517 return super .getListeners(listenerType);
518 }
519 return AWTEventMulticaster.getListeners(l, listenerType);
520 }
521
522 // REMIND: remove when filtering is done at lower level
523 boolean eventEnabled(AWTEvent e) {
524 if (e.id == ItemEvent.ITEM_STATE_CHANGED) {
525 if ((eventMask & AWTEvent.ITEM_EVENT_MASK) != 0
526 || itemListener != null) {
527 return true;
528 }
529 return false;
530 }
531 return super .eventEnabled(e);
532 }
533
534 /**
535 * Processes events on this check box.
536 * If the event is an instance of <code>ItemEvent</code>,
537 * this method invokes the <code>processItemEvent</code> method.
538 * Otherwise, it calls its superclass's <code>processEvent</code> method.
539 * <p>Note that if the event parameter is <code>null</code>
540 * the behavior is unspecified and may result in an
541 * exception.
542 *
543 * @param e the event
544 * @see java.awt.event.ItemEvent
545 * @see #processItemEvent
546 * @since JDK1.1
547 */
548 protected void processEvent(AWTEvent e) {
549 if (e instanceof ItemEvent) {
550 processItemEvent((ItemEvent) e);
551 return;
552 }
553 super .processEvent(e);
554 }
555
556 /**
557 * Processes item events occurring on this check box by
558 * dispatching them to any registered
559 * <code>ItemListener</code> objects.
560 * <p>
561 * This method is not called unless item events are
562 * enabled for this component. Item events are enabled
563 * when one of the following occurs:
564 * <p><ul>
565 * <li>An <code>ItemListener</code> object is registered
566 * via <code>addItemListener</code>.
567 * <li>Item events are enabled via <code>enableEvents</code>.
568 * </ul>
569 * <p>Note that if the event parameter is <code>null</code>
570 * the behavior is unspecified and may result in an
571 * exception.
572 *
573 * @param e the item event
574 * @see java.awt.event.ItemEvent
575 * @see java.awt.event.ItemListener
576 * @see #addItemListener
577 * @see java.awt.Component#enableEvents
578 * @since JDK1.1
579 */
580 protected void processItemEvent(ItemEvent e) {
581 ItemListener listener = itemListener;
582 if (listener != null) {
583 listener.itemStateChanged(e);
584 }
585 }
586
587 /**
588 * Returns a string representing the state of this <code>Checkbox</code>.
589 * This method is intended to be used only for debugging purposes, and the
590 * content and format of the returned string may vary between
591 * implementations. The returned string may be empty but may not be
592 * <code>null</code>.
593 *
594 * @return the parameter string of this check box
595 */
596 protected String paramString() {
597 String str = super .paramString();
598 String label = this .label;
599 if (label != null) {
600 str += ",label=" + label;
601 }
602 return str + ",state=" + state;
603 }
604
605 /* Serialization support.
606 */
607
608 /*
609 * Serialized data version
610 * @serial
611 */
612 private int checkboxSerializedDataVersion = 1;
613
614 /**
615 * Writes default serializable fields to stream. Writes
616 * a list of serializable <code>ItemListeners</code>
617 * as optional data. The non-serializable
618 * <code>ItemListeners</code> are detected and
619 * no attempt is made to serialize them.
620 *
621 * @param s the <code>ObjectOutputStream</code> to write
622 * @serialData <code>null</code> terminated sequence of 0
623 * or more pairs; the pair consists of a <code>String</code>
624 * and an <code>Object</code>; the <code>String</code> indicates
625 * the type of object and is one of the following:
626 * <code>itemListenerK</code> indicating an
627 * <code>ItemListener</code> object
628 *
629 * @see AWTEventMulticaster#save(ObjectOutputStream, String, EventListener)
630 * @see java.awt.Component#itemListenerK
631 * @see #readObject(ObjectInputStream)
632 */
633 private void writeObject(ObjectOutputStream s)
634 throws java.io.IOException {
635 s.defaultWriteObject();
636
637 AWTEventMulticaster.save(s, itemListenerK, itemListener);
638 s.writeObject(null);
639 }
640
641 /**
642 * Reads the <code>ObjectInputStream</code> and if it
643 * isn't <code>null</code> adds a listener to receive
644 * item events fired by the <code>Checkbox</code>.
645 * Unrecognized keys or values will be ignored.
646 *
647 * @param s the <code>ObjectInputStream</code> to read
648 * @exception HeadlessException if
649 * <code>GraphicsEnvironment.isHeadless</code> returns
650 * <code>true</code>
651 * @serial
652 * @see #removeItemListener(ItemListener)
653 * @see #addItemListener(ItemListener)
654 * @see java.awt.GraphicsEnvironment#isHeadless
655 * @see #writeObject(ObjectOutputStream)
656 */
657 private void readObject(ObjectInputStream s)
658 throws ClassNotFoundException, IOException,
659 HeadlessException {
660 GraphicsEnvironment.checkHeadless();
661 s.defaultReadObject();
662
663 Object keyOrNull;
664 while (null != (keyOrNull = s.readObject())) {
665 String key = ((String) keyOrNull).intern();
666
667 if (itemListenerK == key)
668 addItemListener((ItemListener) (s.readObject()));
669
670 else
671 // skip value for unrecognized key
672 s.readObject();
673 }
674 }
675
676 /**
677 * Initialize JNI field and method ids
678 */
679 private static native void initIDs();
680
681 /////////////////
682 // Accessibility support
683 ////////////////
684
685 /**
686 * Gets the AccessibleContext associated with this Checkbox.
687 * For checkboxes, the AccessibleContext takes the form of an
688 * AccessibleAWTCheckbox.
689 * A new AccessibleAWTCheckbox is created if necessary.
690 *
691 * @return an AccessibleAWTCheckbox that serves as the
692 * AccessibleContext of this Checkbox
693 * @since 1.3
694 */
695 public AccessibleContext getAccessibleContext() {
696 if (accessibleContext == null) {
697 accessibleContext = new AccessibleAWTCheckbox();
698 }
699 return accessibleContext;
700 }
701
702 /**
703 * This class implements accessibility support for the
704 * <code>Checkbox</code> class. It provides an implementation of the
705 * Java Accessibility API appropriate to checkbox user-interface elements.
706 * @since 1.3
707 */
708 protected class AccessibleAWTCheckbox extends
709 AccessibleAWTComponent implements ItemListener,
710 AccessibleAction, AccessibleValue {
711 /*
712 * JDK 1.3 serialVersionUID
713 */
714 private static final long serialVersionUID = 7881579233144754107L;
715
716 public AccessibleAWTCheckbox() {
717 super ();
718 Checkbox.this .addItemListener(this );
719 }
720
721 /**
722 * Fire accessible property change events when the state of the
723 * toggle button changes.
724 */
725 public void itemStateChanged(ItemEvent e) {
726 Checkbox cb = (Checkbox) e.getSource();
727 if (Checkbox.this .accessibleContext != null) {
728 if (cb.getState()) {
729 Checkbox.this .accessibleContext
730 .firePropertyChange(
731 AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
732 null, AccessibleState.CHECKED);
733 } else {
734 Checkbox.this .accessibleContext
735 .firePropertyChange(
736 AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
737 AccessibleState.CHECKED, null);
738 }
739 }
740 }
741
742 /**
743 * Get the AccessibleAction associated with this object. In the
744 * implementation of the Java Accessibility API for this class,
745 * return this object, which is responsible for implementing the
746 * AccessibleAction interface on behalf of itself.
747 *
748 * @return this object
749 */
750 public AccessibleAction getAccessibleAction() {
751 return this ;
752 }
753
754 /**
755 * Get the AccessibleValue associated with this object. In the
756 * implementation of the Java Accessibility API for this class,
757 * return this object, which is responsible for implementing the
758 * AccessibleValue interface on behalf of itself.
759 *
760 * @return this object
761 */
762 public AccessibleValue getAccessibleValue() {
763 return this ;
764 }
765
766 /**
767 * Returns the number of Actions available in this object.
768 * If there is more than one, the first one is the "default"
769 * action.
770 *
771 * @return the number of Actions in this object
772 */
773 public int getAccessibleActionCount() {
774 return 0; // To be fully implemented in a future release
775 }
776
777 /**
778 * Return a description of the specified action of the object.
779 *
780 * @param i zero-based index of the actions
781 */
782 public String getAccessibleActionDescription(int i) {
783 return null; // To be fully implemented in a future release
784 }
785
786 /**
787 * Perform the specified Action on the object
788 *
789 * @param i zero-based index of actions
790 * @return true if the the action was performed; else false.
791 */
792 public boolean doAccessibleAction(int i) {
793 return false; // To be fully implemented in a future release
794 }
795
796 /**
797 * Get the value of this object as a Number. If the value has not been
798 * set, the return value will be null.
799 *
800 * @return value of the object
801 * @see #setCurrentAccessibleValue
802 */
803 public Number getCurrentAccessibleValue() {
804 return null; // To be fully implemented in a future release
805 }
806
807 /**
808 * Set the value of this object as a Number.
809 *
810 * @return True if the value was set; else False
811 * @see #getCurrentAccessibleValue
812 */
813 public boolean setCurrentAccessibleValue(Number n) {
814 return false; // To be fully implemented in a future release
815 }
816
817 /**
818 * Get the minimum value of this object as a Number.
819 *
820 * @return Minimum value of the object; null if this object does not
821 * have a minimum value
822 * @see #getMaximumAccessibleValue
823 */
824 public Number getMinimumAccessibleValue() {
825 return null; // To be fully implemented in a future release
826 }
827
828 /**
829 * Get the maximum value of this object as a Number.
830 *
831 * @return Maximum value of the object; null if this object does not
832 * have a maximum value
833 * @see #getMinimumAccessibleValue
834 */
835 public Number getMaximumAccessibleValue() {
836 return null; // To be fully implemented in a future release
837 }
838
839 /**
840 * Get the role of this object.
841 *
842 * @return an instance of AccessibleRole describing the role of
843 * the object
844 * @see AccessibleRole
845 */
846 public AccessibleRole getAccessibleRole() {
847 return AccessibleRole.CHECK_BOX;
848 }
849
850 /**
851 * Get the state set of this object.
852 *
853 * @return an instance of AccessibleState containing the current state
854 * of the object
855 * @see AccessibleState
856 */
857 public AccessibleStateSet getAccessibleStateSet() {
858 AccessibleStateSet states = super .getAccessibleStateSet();
859 if (getState()) {
860 states.add(AccessibleState.CHECKED);
861 }
862 return states;
863 }
864
865 } // inner class AccessibleAWTCheckbox
866
867 }
|