diff options
Diffstat (limited to 'libjava/javax/swing/JToggleButton.java')
-rw-r--r-- | libjava/javax/swing/JToggleButton.java | 177 |
1 files changed, 168 insertions, 9 deletions
diff --git a/libjava/javax/swing/JToggleButton.java b/libjava/javax/swing/JToggleButton.java index c04bcc3..8a38d48 100644 --- a/libjava/javax/swing/JToggleButton.java +++ b/libjava/javax/swing/JToggleButton.java @@ -38,17 +38,103 @@ exception statement from your version. */ package javax.swing; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + import javax.accessibility.Accessible; import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; import javax.swing.plaf.ButtonUI; +/** + * The <code>JToggleButton</code> component provides a stateful button, + * which can be either selected or unselected. This provides the basis + * for the implementations of radio buttons (<code>JRadioButton</code>) + * and check boxes (<code>JCheckBox</code>). + * + * @author Michael Koch <konqueror@gmx.de> + * @author Graydon Hoare <graydon@redhat.com> + * @author Andrew John Hughes <gnu_andrew@member.fsf.org> + * @see JRadioButton + * @see JCheckBox + * @since 1.2 + */ public class JToggleButton extends AbstractButton implements Accessible { + + /** + * This class provides accessibility support for the toggle button. + */ + protected class AccessibleJToggleButton + extends AccessibleAbstractButton + implements ItemListener + { + + /** + * Constructor for the accessible toggle button. + */ + public AccessibleJToggleButton() + { + super(); + /* Register the accessible toggle button as a listener for item events */ + addItemListener(this); + } + + /** + * Returns the accessible role for the toggle button. + * + * @return An instance of <code>AccessibleRole</code>, describing + * the role of the toggle button. + */ + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.TOGGLE_BUTTON; + } + + /** + * Monitors the toggle button for state changes and fires accessible + * property change events when they occur. + * + * @param event the event that occurred. + */ + public void itemStateChanged(ItemEvent event) + { + /* Fire a state property change event as the button's state has changed */ + if (event.getStateChange() == ItemEvent.SELECTED) + { + /* State has changed from unselected (null) to selected */ + firePropertyChange(ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.SELECTED); + } + else + { + /* State has changed from selected to unselected (null) */ + firePropertyChange(ACCESSIBLE_STATE_PROPERTY, AccessibleState.ENABLED, null); + } + } + + } + /** + * The model handles the storage and maintenance of the state of + * the toggle button. This follows the same paradigm (the MVC + * or Model-View-Controller design pattern) employed by + * other Swing components, where the data associated with a component + * is stored separately from the display aspects. + */ public static class ToggleButtonModel extends DefaultButtonModel { + /** + * Compatible with Sun's JDK. + */ private static final long serialVersionUID = -1589950750899943974L; + /** + * Sets the pressed state of the button. The selected state + * of the button also changes follwing the button being pressed. + * + * @param b true if the button is pressed down. + */ public void setPressed(boolean b) { if (! isEnabled()) @@ -63,44 +149,97 @@ public class JToggleButton extends AbstractButton implements Accessible } } - + /** + * Compatible with Sun's JDK. + */ private static final long serialVersionUID = -3128248873429850443L; + /** + * Constructs an unselected toggle button with no text or icon. + */ public JToggleButton() { - this(null, null); + this(null, null, false); } + + /** + * Constructs a toggle button using the labelling, state + * and icon specified by the supplied action. + * + * @param a the action to use to define the properties of the button. + */ public JToggleButton(Action a) { this(); setAction(a); } + /** + * Constructs an unselected toggle button with the supplied icon + * and no text. + * + * @param icon the icon to use. + */ public JToggleButton(Icon icon) { - this(null, icon); + this(null, icon, false); } - public JToggleButton (Icon icon, boolean selected) + /** + * Constructs a toggle button with the supplied icon and state. + * + * @param icon the icon to use. + * @param selected if true, the toggle button is initially in the + * selected state. Otherwise, the button is unselected. + */ + public JToggleButton(Icon icon, boolean selected) { this(null, icon, selected); } + /** + * Constructs an unselected toggle button using the supplied text + * and no icon. + * + * @param text the text to use. + */ public JToggleButton(String text) { - this(text, null); + this(text, null, false); } + /** + * Constructs a toggle button with the supplied text and state. + * + * @param text the text to use. + * @param selected if true, the toggle button is initially in the + * selected state. Otherwise, the button is unselected. + */ public JToggleButton(String text, boolean selected) { this(text, null, selected); } + /** + * Constructs an unselected toggle button with the supplied text + * and icon. + * + * @param text the text to use. + * @param icon the icon to use. + */ public JToggleButton(String text, Icon icon) { this(text, icon, false); } + /** + * Constructs a toggle button with the supplied text, icon and state. + * + * @param text the text to use. + * @param icon the icon to use. + * @param selected if true, the toggle button is initially in the + * selected state. Otherwise, the button is unselected. + */ public JToggleButton (String text, Icon icon, boolean selected) { super(text, icon); @@ -112,34 +251,54 @@ public class JToggleButton extends AbstractButton implements Accessible /** * Gets the AccessibleContext associated with this <code>JToggleButton</code>. + * The context is created, if necessary. * * @return the associated context */ public AccessibleContext getAccessibleContext() { - return null; + /* Create the context if this is the first request */ + if (accessibleContext == null) + { + /* Create the context */ + accessibleContext = new AccessibleJToggleButton(); + } + return accessibleContext; } /** * Returns a string that specifies the name of the Look and Feel * class that renders this component. + * + * @return The Look and Feel UI class in <code>String</code> form. */ public String getUIClassID() { return "ToggleButtonUI"; } + /** + * Returns a textual representation of this component for debugging. + * Users should not depend on anything as regards the content or formatting + * of this string, except for the fact that the returned string may never be + * null (only empty). + * + * @return the component in <code>String</code> form for debugging. + */ protected String paramString() { return "JToggleButton"; } - + /** + * This method resets the toggle button's UI delegate to the default UI for + * the current look and feel. + */ public void updateUI() { - ButtonUI b = (ButtonUI)UIManager.getUI(this); - setUI(b); + setUI((ButtonUI)UIManager.getUI(this)); } + } |