javafx.scene.control.RadioMenuItem Maven / Gradle / Ivy
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javafx.scene.control;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.BooleanPropertyBase;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ObjectPropertyBase;
import javafx.scene.Node;
/**
*
* A RadioMenuItem is a {@link MenuItem} that can be toggled (it uses
* the {@link javafx.scene.control.Toggle Toggle} mixin). This means that
* RadioMenuItem has an API very similar in nature to other controls that use
* {@link javafx.scene.control.Toggle Toggle}, such as
* {@link javafx.scene.control.RadioButton} and
* {@link javafx.scene.control.ToggleButton}. RadioMenuItem is
* specifically designed for use within a {@code Menu}, so refer to that class
* API documentation for more information on how to add a RadioMenuItem into it.
*
* To create a simple, ungrouped RadioMenuItem, do the following:
RadioMenuItem radioItem = new RadioMenuItem("radio text");
radioItem.setSelected(false);
radioItem.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("radio toggled");
}
});
*
* The problem with the example above is that this offers no benefit over using
* a normal MenuItem. As already mentioned, the purpose of a
* RadioMenuItem is to offer
* multiple choices to the user, and only allow for one of these choices to be
* selected at any one time (i.e. the selection should be mutually exclusive).
* To achieve this, you can place zero or more RadioMenuItem's into groups. When
* in groups, only one RadioMenuItem at a time within that group can be selected.
* To put two RadioMenuItem instances into the same group, simply assign them
* both the same value for {@code toggleGroup}. For example:
ToggleGroup toggleGroup = new ToggleGroup();
RadioMenuItem radioItem1 = new RadioMenuItem("Option 1");
radioItem.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("radio toggled");
}
});
radioItem1.setToggleGroup(toggleGroup);
RadioMenuItem radioItem2 = new RadioMenuItem("Option 2");
radioItem.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("radio toggled");
}
});
radioItem2.setToggleGroup(toggleGroup);
*
* In this example, with both RadioMenuItem's assigned to the same
* {@link javafx.scene.control.ToggleGroup ToggleGroup}, only one item may be
* selected at any one time, and should
* the selection change, the ToggleGroup will take care of deselecting the
* previous item.
*
* @see MenuItem
* @see Menu
* @since JavaFX 2.0
*/
public class RadioMenuItem extends MenuItem implements Toggle {
/***************************************************************************
* *
* Constructors *
* *
**************************************************************************/
private RadioMenuItem() {
this(null,null);
}
/**
* Constructs a RadioMenuItem and sets the display text with the specified text.
*/
public RadioMenuItem(String text) {
this(text,null);
}
/**
* Constructs a RadioMenuItem and sets the display text with the specified text
* and sets the graphic {@link Node} to the given node.
*/
public RadioMenuItem(String text, Node graphic) {
super(text,graphic);
getStyleClass().add(DEFAULT_STYLE_CLASS);
}
/***************************************************************************
* *
* Properties *
* *
**************************************************************************/
// --- Toggle Group
private ObjectProperty