Index: ChangeLog =================================================================== RCS file: /cvsroot/classpath/classpath/ChangeLog,v retrieving revision 1.2428 diff -u -3 -p -u -r1.2428 ChangeLog --- ChangeLog 18 Aug 2004 23:05:59 -0000 1.2428 +++ ChangeLog 18 Aug 2004 23:08:58 -0000 @@ -1,5 +1,13 @@ 2004-08-18 Andrew John Hughes + * javax/swing/JRadioButton.java, javax/swing/JToggleButton.java, + javax/swing/AbstractButton.java + Implemented additional constructors and accessibility + classes. Added documentation and fixed a typo in + AbstractButton. + +2004-08-18 Andrew John Hughes + * javax/swing/JTextArea.java Implemented insert() method and added additional documentation. Index: javax/swing/AbstractButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/AbstractButton.java,v retrieving revision 1.18 diff -u -3 -p -u -r1.18 AbstractButton.java --- javax/swing/AbstractButton.java 9 Aug 2004 22:29:15 -0000 1.18 +++ javax/swing/AbstractButton.java 18 Aug 2004 23:08:59 -0000 @@ -300,7 +300,7 @@ public abstract class AbstractButton ext public static final String VERTICAL_TEXT_POSITION_CHANGED_PROPERTY = "verticalTextPosition"; /** - * A Java Accessibility extension of the AbstractButton. + * A Java Accessibility extension of the AbstractButton. */ protected abstract class AccessibleAbstractButton extends AccessibleJComponent implements AccessibleAction, AccessibleValue, Index: javax/swing/JRadioButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JRadioButton.java,v retrieving revision 1.9 diff -u -3 -p -u -r1.9 JRadioButton.java --- javax/swing/JRadioButton.java 22 Jul 2004 19:45:39 -0000 1.9 +++ javax/swing/JRadioButton.java 18 Aug 2004 23:08:59 -0000 @@ -39,56 +39,220 @@ exception statement from your version. * package javax.swing; import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.swing.plaf.ButtonUI; +/** + * The JRadioButton component provides a visually selectable + * button with mutually exclusive behaviour within a ButtonGroup. + * A series of radio buttons can be used to provide options to the user, + * where the user can only select one of the available options. The state + * of the button is provided by the superclass, JToggleButton. + * JRadioButton adds the additional behaviour, that if two + * or more radio buttons are grouped together, the selection of one implies + * the deselection of the other buttons within the group. + *

+ * + * Buttons are grouped by adding each instance to a ButtonGroup. + * The existence of such a grouping is not reflected visually, so other means + * should be used to denote this. For instance, the grouped buttons can be placed + * within the same panel, possibly with an appropriate border to denote + * the connection between the components. + * + * @author Michael Koch + * @author Graydon Hoare + * @author Andrew John Hughes + * @see JToggleButton + * @see ButtonGroup + * @since 1.2 + */ public class JRadioButton extends JToggleButton { - private static final long serialVersionUID = 7751949583255506856L; - public JRadioButton() - { - this(null, null); - } - public JRadioButton(Action a) - { - this(); - setAction(a); - } + /** + * Compatible with Sun's JDK. + */ + private static final long serialVersionUID = 7751949583255506856L; - public JRadioButton(Icon icon) - { - this(null, icon); - } + /** + * This class provides accessibility support for the toggle button. + */ + protected class AccessibleJRadioButton + extends AccessibleJToggleButton + { + + /** + * Constructor for the accessible toggle button. + */ + protected AccessibleJRadioButton() + { + /* Call the superclass to register for events */ + super(); + } + + /** + * Returns the accessible role for the toggle button. + * + * @return An instance of AccessibleRole, describing + * the role of the toggle button. + */ + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.RADIO_BUTTON; + } + + } + + /** + * Constructs an unselected radio button with no text or icon. + */ + public JRadioButton() + { + this(null, null, false); + } - public JRadioButton(String text) - { - this(text, null); - } - - public JRadioButton(String text, Icon icon) - { - super(text, icon); - borderPainted = false; - contentAreaFilled = false; - } - - - public AccessibleContext getAccessibleContext() - { - //Gets the AccessibleContext associated with this JRadioButton. - return null; - } + /** + * Constructs a radio 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 JRadioButton(Action a) + { + this(); + setAction(a); + } - public String getUIClassID() - { - //Returns a string that specifies the name of the Look and Feel - //class that renders this component. - return "RadioButtonUI"; - } + /** + * Constructs an unselected radio button with the supplied icon + * and no text. + * + * @param icon the icon to use. + */ + public JRadioButton(Icon icon) + { + this(null, icon, false); + } - protected String paramString() - { - return "JRadioButton"; - } + /** + * Constructs a radio button with the supplied icon and state. + * + * @param icon the icon to use. + * @param selected if true, the radio button is initially in the + * selected state. Otherwise, the button is unselected. + */ + public JRadioButton(Icon icon, boolean selected) + { + this(null, icon, selected); + } + + /** + * Constructs an unselected radio button using the supplied text + * and no icon. + * + * @param text the text to use. + */ + public JRadioButton(String text) + { + this(text, null, false); + } + + /** + * Constructs a radio button with the supplied text and state. + * + * @param text the text to use. + * @param selected if true, the radio button is initially in the + * selected state. Otherwise, the button is unselected. + */ + public JRadioButton(String text, boolean selected) + { + this(text, null, selected); + } + + /** + * Constructs an unselected radio button with the supplied text + * and icon. + * + * @param text the text to use. + * @param icon the icon to use. + */ + public JRadioButton(String text, Icon icon) + { + this(text, icon, false); + } + + /** + * Constructs a radio 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 radio button is initially in the + * selected state. Otherwise, the button is unselected. + */ + public JRadioButton(String text, Icon icon, boolean selected) + { + super(text, icon, selected); + borderPainted = false; + contentAreaFilled = false; + } + + /** + * Returns the accessible context for this JRadioButton, + * in the form of an instance of AccessibleJRadioButton. + * The context is created, if necessary. + * + * @return the associated context + */ + public AccessibleContext getAccessibleContext() + { + /* Create the context if this is the first request */ + if (accessibleContext == null) + { + /* Create the context */ + accessibleContext = new AccessibleJRadioButton(); + } + return accessibleContext; + } + + /** + * Returns a string specifying the name of the Look and Feel UI class + * that renders this component. + * + * @return the Look and Feel UI class for JRadioButtons + * as a String. + */ + public String getUIClassID() + { + return "RadioButtonUI"; + } + + /** + * Returns a string representation of this component for debugging use. + * 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 String form for debugging. + */ + protected String paramString() + { + return "JRadioButton"; + } + + /** + * This method resets the radio button's UI delegate to the default UI for + * the current look and feel. + */ + public void updateUI() + { + /* + I can't see any difference between this and the superclass one, + but Sun reimplements it... there is no RadioButtonUI class for it + to be cast to. + */ + setUI((ButtonUI) UIManager.getUI(this)); + } + } Index: javax/swing/JToggleButton.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JToggleButton.java,v retrieving revision 1.12 diff -u -3 -p -u -r1.12 JToggleButton.java --- javax/swing/JToggleButton.java 22 Jul 2004 19:45:39 -0000 1.12 +++ javax/swing/JToggleButton.java 18 Aug 2004 23:08:59 -0000 @@ -38,17 +38,102 @@ 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 JToggleButton component provides a stateful button, + * which can be either selected or unselected. This provides the basis + * for the implementations of radio buttons (JRadioButton) + * and check boxes (JCheckBox). + * + * @author Michael Koch + * @author Graydon Hoare + * @author Andrew John Hughes + * @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 AccessibleRole, 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 +148,97 @@ public class JToggleButton extends Abstr } } - + /** + * 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 +250,54 @@ public class JToggleButton extends Abstr /** * Gets the AccessibleContext associated with this JToggleButton. + * 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 String 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 String 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)); } + }