7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package javax.swing;
26
27 import java.util.EventListener;
28
29 import java.awt.*;
30 import java.awt.event.*;
31 import java.awt.image.*;
32
33 import java.io.ObjectOutputStream;
34 import java.io.ObjectInputStream;
35 import java.io.IOException;
36
37 import javax.swing.plaf.*;
38 import javax.accessibility.*;
39
40 /**
41 * An implementation of a radio button menu item.
42 * A <code>JRadioButtonMenuItem</code> is
43 * a menu item that is part of a group of menu items in which only one
44 * item in the group can be selected. The selected item displays its
45 * selected state. Selecting it causes any other selected item to
46 * switch to the unselected state.
47 * To control the selected state of a group of radio button menu items,
48 * use a <code>ButtonGroup</code> object.
49 * <p>
50 * Menu items can be configured, and to some degree controlled, by
51 * <code><a href="Action.html">Action</a></code>s. Using an
52 * <code>Action</code> with a menu item has many benefits beyond directly
53 * configuring a menu item. Refer to <a href="Action.html#buttonActions">
54 * Swing Components Supporting <code>Action</code></a> for more
55 * details, and you can find more information in <a
56 * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
57 * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
58 * <p>
59 * For further documentation and examples see
60 * <a
61 href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
62 * a section in <em>The Java Tutorial.</em>
63 * <p>
64 * <strong>Warning:</strong> Swing is not thread safe. For more
65 * information see <a
66 * href="package-summary.html#threading">Swing's Threading
67 * Policy</a>.
68 * <p>
69 * <strong>Warning:</strong>
70 * Serialized objects of this class will not be compatible with
71 * future Swing releases. The current serialization support is
72 * appropriate for short term storage or RMI between applications running
73 * the same version of Swing. As of 1.4, support for long term storage
74 * of all JavaBeans™
75 * has been added to the <code>java.beans</code> package.
76 * Please see {@link java.beans.XMLEncoder}.
77 *
78 * @beaninfo
79 * attribute: isContainer false
80 * description: A component within a group of menu items which can be selected.
81 *
82 * @author Georges Saab
83 * @author David Karlton
84 * @see ButtonGroup
85 * @since 1.2
86 */
87 @SuppressWarnings("serial") // Same-version serialization only
88 public class JRadioButtonMenuItem extends JMenuItem implements Accessible {
89 /**
90 * @see #getUIClassID
91 * @see #readObject
92 */
93 private static final String uiClassID = "RadioButtonMenuItemUI";
94
95 /**
96 * Creates a <code>JRadioButtonMenuItem</code> with no set text or icon.
97 */
98 public JRadioButtonMenuItem() {
99 this(null, null, false);
100 }
101
102 /**
103 * Creates a <code>JRadioButtonMenuItem</code> with an icon.
104 *
105 * @param icon the <code>Icon</code> to display on the
106 * <code>JRadioButtonMenuItem</code>
174 *
175 * @param text the string displayed on the radio button
176 * @param icon the image that the button should display
177 * @param selected if {@code true}, the button is initially selected,
178 * otherwise, the button is initially unselected
179 */
180 public JRadioButtonMenuItem(String text, Icon icon, boolean selected) {
181 super(text, icon);
182 setModel(new JToggleButton.ToggleButtonModel());
183 setSelected(selected);
184 setFocusable(false);
185 }
186
187 /**
188 * Returns the name of the L&F class that renders this component.
189 *
190 * @return the string "RadioButtonMenuItemUI"
191 * @see JComponent#getUIClassID
192 * @see UIDefaults#getUI
193 */
194 public String getUIClassID() {
195 return uiClassID;
196 }
197
198 /**
199 * See <code>readObject</code> and <code>writeObject</code> in
200 * <code>JComponent</code> for more
201 * information about serialization in Swing.
202 */
203 private void writeObject(ObjectOutputStream s) throws IOException {
204 s.defaultWriteObject();
205 if (getUIClassID().equals(uiClassID)) {
206 byte count = JComponent.getWriteObjCounter(this);
207 JComponent.setWriteObjCounter(this, --count);
208 if (count == 0 && ui != null) {
209 ui.installUI(this);
210 }
211 }
212 }
213
231 * Overriden to return true, JRadioButtonMenuItem supports
232 * the selected state.
233 */
234 boolean shouldUpdateSelectedStateFromAction() {
235 return true;
236 }
237
238 /////////////////
239 // Accessibility support
240 ////////////////
241
242 /**
243 * Gets the AccessibleContext associated with this JRadioButtonMenuItem.
244 * For JRadioButtonMenuItems, the AccessibleContext takes the form of an
245 * AccessibleJRadioButtonMenuItem.
246 * A new AccessibleJRadioButtonMenuItem instance is created if necessary.
247 *
248 * @return an AccessibleJRadioButtonMenuItem that serves as the
249 * AccessibleContext of this JRadioButtonMenuItem
250 */
251 public AccessibleContext getAccessibleContext() {
252 if (accessibleContext == null) {
253 accessibleContext = new AccessibleJRadioButtonMenuItem();
254 }
255 return accessibleContext;
256 }
257
258 /**
259 * This class implements accessibility support for the
260 * <code>JRadioButtonMenuItem</code> class. It provides an
261 * implementation of the Java Accessibility API appropriate to
262 * <code>JRadioButtonMenuItem</code> user-interface elements.
263 * <p>
264 * <strong>Warning:</strong>
265 * Serialized objects of this class will not be compatible with
266 * future Swing releases. The current serialization support is
267 * appropriate for short term storage or RMI between applications running
268 * the same version of Swing. As of 1.4, support for long term storage
269 * of all JavaBeans™
270 * has been added to the <code>java.beans</code> package.
|
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package javax.swing;
26
27 import java.beans.JavaBean;
28 import java.beans.BeanProperty;
29 import java.io.ObjectOutputStream;
30 import java.io.IOException;
31
32 import javax.accessibility.*;
33
34 /**
35 * An implementation of a radio button menu item.
36 * A <code>JRadioButtonMenuItem</code> is
37 * a menu item that is part of a group of menu items in which only one
38 * item in the group can be selected. The selected item displays its
39 * selected state. Selecting it causes any other selected item to
40 * switch to the unselected state.
41 * To control the selected state of a group of radio button menu items,
42 * use a <code>ButtonGroup</code> object.
43 * <p>
44 * Menu items can be configured, and to some degree controlled, by
45 * <code><a href="Action.html">Action</a></code>s. Using an
46 * <code>Action</code> with a menu item has many benefits beyond directly
47 * configuring a menu item. Refer to <a href="Action.html#buttonActions">
48 * Swing Components Supporting <code>Action</code></a> for more
49 * details, and you can find more information in <a
50 * href="http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html">How
51 * to Use Actions</a>, a section in <em>The Java Tutorial</em>.
52 * <p>
53 * For further documentation and examples see
54 * <a
55 href="http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html">How to Use Menus</a>,
56 * a section in <em>The Java Tutorial.</em>
57 * <p>
58 * <strong>Warning:</strong> Swing is not thread safe. For more
59 * information see <a
60 * href="package-summary.html#threading">Swing's Threading
61 * Policy</a>.
62 * <p>
63 * <strong>Warning:</strong>
64 * Serialized objects of this class will not be compatible with
65 * future Swing releases. The current serialization support is
66 * appropriate for short term storage or RMI between applications running
67 * the same version of Swing. As of 1.4, support for long term storage
68 * of all JavaBeans™
69 * has been added to the <code>java.beans</code> package.
70 * Please see {@link java.beans.XMLEncoder}.
71 *
72 * @author Georges Saab
73 * @author David Karlton
74 * @see ButtonGroup
75 * @since 1.2
76 */
77 @JavaBean(description = "A component within a group of menu items which can be selected.")
78 @SwingContainer(false)
79 @SuppressWarnings("serial") // Same-version serialization only
80 public class JRadioButtonMenuItem extends JMenuItem implements Accessible {
81 /**
82 * @see #getUIClassID
83 * @see #readObject
84 */
85 private static final String uiClassID = "RadioButtonMenuItemUI";
86
87 /**
88 * Creates a <code>JRadioButtonMenuItem</code> with no set text or icon.
89 */
90 public JRadioButtonMenuItem() {
91 this(null, null, false);
92 }
93
94 /**
95 * Creates a <code>JRadioButtonMenuItem</code> with an icon.
96 *
97 * @param icon the <code>Icon</code> to display on the
98 * <code>JRadioButtonMenuItem</code>
166 *
167 * @param text the string displayed on the radio button
168 * @param icon the image that the button should display
169 * @param selected if {@code true}, the button is initially selected,
170 * otherwise, the button is initially unselected
171 */
172 public JRadioButtonMenuItem(String text, Icon icon, boolean selected) {
173 super(text, icon);
174 setModel(new JToggleButton.ToggleButtonModel());
175 setSelected(selected);
176 setFocusable(false);
177 }
178
179 /**
180 * Returns the name of the L&F class that renders this component.
181 *
182 * @return the string "RadioButtonMenuItemUI"
183 * @see JComponent#getUIClassID
184 * @see UIDefaults#getUI
185 */
186 @BeanProperty(bound = false)
187 public String getUIClassID() {
188 return uiClassID;
189 }
190
191 /**
192 * See <code>readObject</code> and <code>writeObject</code> in
193 * <code>JComponent</code> for more
194 * information about serialization in Swing.
195 */
196 private void writeObject(ObjectOutputStream s) throws IOException {
197 s.defaultWriteObject();
198 if (getUIClassID().equals(uiClassID)) {
199 byte count = JComponent.getWriteObjCounter(this);
200 JComponent.setWriteObjCounter(this, --count);
201 if (count == 0 && ui != null) {
202 ui.installUI(this);
203 }
204 }
205 }
206
224 * Overriden to return true, JRadioButtonMenuItem supports
225 * the selected state.
226 */
227 boolean shouldUpdateSelectedStateFromAction() {
228 return true;
229 }
230
231 /////////////////
232 // Accessibility support
233 ////////////////
234
235 /**
236 * Gets the AccessibleContext associated with this JRadioButtonMenuItem.
237 * For JRadioButtonMenuItems, the AccessibleContext takes the form of an
238 * AccessibleJRadioButtonMenuItem.
239 * A new AccessibleJRadioButtonMenuItem instance is created if necessary.
240 *
241 * @return an AccessibleJRadioButtonMenuItem that serves as the
242 * AccessibleContext of this JRadioButtonMenuItem
243 */
244 @BeanProperty(bound = false)
245 public AccessibleContext getAccessibleContext() {
246 if (accessibleContext == null) {
247 accessibleContext = new AccessibleJRadioButtonMenuItem();
248 }
249 return accessibleContext;
250 }
251
252 /**
253 * This class implements accessibility support for the
254 * <code>JRadioButtonMenuItem</code> class. It provides an
255 * implementation of the Java Accessibility API appropriate to
256 * <code>JRadioButtonMenuItem</code> user-interface elements.
257 * <p>
258 * <strong>Warning:</strong>
259 * Serialized objects of this class will not be compatible with
260 * future Swing releases. The current serialization support is
261 * appropriate for short term storage or RMI between applications running
262 * the same version of Swing. As of 1.4, support for long term storage
263 * of all JavaBeans™
264 * has been added to the <code>java.beans</code> package.
|