Frames | No Frames |
1: /* JRadioButton.java -- 2: Copyright (C) 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 javax.swing; 40: 41: import javax.accessibility.AccessibleContext; 42: import javax.accessibility.AccessibleRole; 43: import javax.swing.plaf.ButtonUI; 44: 45: /** 46: * The <code>JRadioButton</code> component provides a visually selectable 47: * button with mutually exclusive behaviour within a <code>ButtonGroup</code>. 48: * A series of radio buttons can be used to provide options to the user, 49: * where the user can only select one of the available options. The state 50: * of the button is provided by the superclass, <code>JToggleButton</code>. 51: * <code>JRadioButton</code> adds the additional behaviour, that if two 52: * or more radio buttons are grouped together, the selection of one implies 53: * the deselection of the other buttons within the group. 54: * <p> 55: * 56: * Buttons are grouped by adding each instance to a <code>ButtonGroup</code>. 57: * The existence of such a grouping is not reflected visually, so other means 58: * should be used to denote this. For instance, the grouped buttons can be placed 59: * within the same panel, possibly with an appropriate border to denote 60: * the connection between the components. 61: * 62: * @author Michael Koch (konqueror@gmx.de) 63: * @author Graydon Hoare (graydon@redhat.com) 64: * @author Andrew John Hughes (gnu_andrew@member.fsf.org) 65: * @see JToggleButton 66: * @see ButtonGroup 67: * @since 1.2 68: */ 69: public class JRadioButton extends JToggleButton 70: { 71: /** 72: * Compatible with Sun's JDK. 73: */ 74: private static final long serialVersionUID = 7751949583255506856L; 75: 76: /** 77: * This class provides accessibility support for the toggle button. 78: */ 79: protected class AccessibleJRadioButton 80: extends AccessibleJToggleButton 81: { 82: private static final long serialVersionUID = 4850967637026120674L; 83: 84: /** 85: * Constructor for the accessible toggle button. 86: */ 87: protected AccessibleJRadioButton() 88: { 89: /* Call the superclass to register for events */ 90: super(); 91: } 92: 93: /** 94: * Returns the accessible role for the toggle button. 95: * 96: * @return An instance of <code>AccessibleRole</code>, describing 97: * the role of the toggle button. 98: */ 99: public AccessibleRole getAccessibleRole() 100: { 101: return AccessibleRole.RADIO_BUTTON; 102: } 103: 104: } 105: 106: /** 107: * Constructs an unselected radio button with no text or icon. 108: */ 109: public JRadioButton() 110: { 111: this(null, null, false); 112: } 113: 114: /** 115: * Constructs a radio button using the labelling, state 116: * and icon specified by the supplied action. 117: * 118: * @param a the action to use to define the properties of the button. 119: */ 120: public JRadioButton(Action a) 121: { 122: this(); 123: setAction(a); 124: } 125: 126: /** 127: * Constructs an unselected radio button with the supplied icon 128: * and no text. 129: * 130: * @param icon the icon to use. 131: */ 132: public JRadioButton(Icon icon) 133: { 134: this(null, icon, false); 135: } 136: 137: /** 138: * Constructs a radio button with the supplied icon and state. 139: * 140: * @param icon the icon to use. 141: * @param selected if true, the radio button is initially in the 142: * selected state. Otherwise, the button is unselected. 143: */ 144: public JRadioButton(Icon icon, boolean selected) 145: { 146: this(null, icon, selected); 147: } 148: 149: /** 150: * Constructs an unselected radio button using the supplied text 151: * and no icon. 152: * 153: * @param text the text to use. 154: */ 155: public JRadioButton(String text) 156: { 157: this(text, null, false); 158: } 159: 160: /** 161: * Constructs a radio button with the supplied text and state. 162: * 163: * @param text the text to use. 164: * @param selected if true, the radio button is initially in the 165: * selected state. Otherwise, the button is unselected. 166: */ 167: public JRadioButton(String text, boolean selected) 168: { 169: this(text, null, selected); 170: } 171: 172: /** 173: * Constructs an unselected radio button with the supplied text 174: * and icon. 175: * 176: * @param text the text to use. 177: * @param icon the icon to use. 178: */ 179: public JRadioButton(String text, Icon icon) 180: { 181: this(text, icon, false); 182: } 183: 184: /** 185: * Constructs a radio button with the supplied text, icon and state. 186: * 187: * @param text the text to use. 188: * @param icon the icon to use. 189: * @param selected if true, the radio button is initially in the 190: * selected state. Otherwise, the button is unselected. 191: */ 192: public JRadioButton(String text, Icon icon, boolean selected) 193: { 194: super(text, icon, selected); 195: setBorderPainted(false); 196: setHorizontalAlignment(LEADING); 197: } 198: 199: /** 200: * Returns the accessible context for this <code>JRadioButton</code>, 201: * in the form of an instance of <code>AccessibleJRadioButton</code>. 202: * The context is created, if necessary. 203: * 204: * @return the associated context 205: */ 206: public AccessibleContext getAccessibleContext() 207: { 208: /* Create the context if this is the first request */ 209: if (accessibleContext == null) 210: { 211: /* Create the context */ 212: accessibleContext = new AccessibleJRadioButton(); 213: } 214: return accessibleContext; 215: } 216: 217: /** 218: * Returns a string specifying the name of the Look and Feel UI class 219: * that renders this component. 220: * 221: * @return the Look and Feel UI class for <code>JRadioButton</code>s 222: * as a <code>String</code>. 223: */ 224: public String getUIClassID() 225: { 226: return "RadioButtonUI"; 227: } 228: 229: /** 230: * Returns a string representation of this component for debugging use. 231: * Users should not depend on anything as regards the content or formatting 232: * of this string, except for the fact that the returned string may never be 233: * null (only empty). 234: * 235: * @return the component in <code>String</code> form for debugging. 236: */ 237: protected String paramString() 238: { 239: return super.paramString(); 240: } 241: 242: /** 243: * This method resets the radio button's UI delegate to the default UI for 244: * the current look and feel. 245: */ 246: public void updateUI() 247: { 248: /* 249: I can't see any difference between this and the superclass one, 250: but Sun reimplements it... there is no RadioButtonUI class for it 251: to be cast to. 252: */ 253: setUI((ButtonUI) UIManager.getUI(this)); 254: } 255: 256: }