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; +/** + * TheJRadioButton
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
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 JRadioButton
s
+ * 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));
}
+
}