diff --git a/modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/ControlAcceleratorSupport.java b/modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/ControlAcceleratorSupport.java index 205781d6840..dff80b68b1a 100644 --- a/modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/ControlAcceleratorSupport.java +++ b/modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/ControlAcceleratorSupport.java @@ -174,8 +174,13 @@ private static void doAcceleratorInstall(final List items, f Event.fireEvent(target, new Event(MenuItem.MENU_VALIDATION_EVENT)); } if (!menuitem.isDisable()) { - if (menuitem instanceof RadioMenuItem) { - ((RadioMenuItem)menuitem).setSelected(!((RadioMenuItem)menuitem).isSelected()); + if (menuitem instanceof RadioMenuItem radioMenuItem) { + if (radioMenuItem.getToggleGroup() == null) { + radioMenuItem.setSelected(!radioMenuItem.isSelected()); + } + else { + radioMenuItem.setSelected(true); + } } else if (menuitem instanceof CheckMenuItem) { ((CheckMenuItem)menuitem).setSelected(!((CheckMenuItem)menuitem).isSelected()); diff --git a/modules/javafx.controls/src/test/java/test/javafx/scene/control/RadioMenuItemTest.java b/modules/javafx.controls/src/test/java/test/javafx/scene/control/RadioMenuItemTest.java index 6b94be6bf91..4a65c32d1e1 100644 --- a/modules/javafx.controls/src/test/java/test/javafx/scene/control/RadioMenuItemTest.java +++ b/modules/javafx.controls/src/test/java/test/javafx/scene/control/RadioMenuItemTest.java @@ -28,6 +28,9 @@ import static test.com.sun.javafx.scene.control.infrastructure.ControlTestUtils.*; import test.com.sun.javafx.pgstub.StubToolkit; +import test.com.sun.javafx.scene.control.infrastructure.KeyEventFirer; +import test.com.sun.javafx.scene.control.infrastructure.KeyModifier; +import test.com.sun.javafx.scene.control.infrastructure.StageLoader; import com.sun.javafx.tk.Toolkit; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; @@ -36,8 +39,13 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Node; +import javafx.scene.Scene; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.ToggleGroup; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuBar; +import javafx.scene.input.KeyCombination; +import javafx.scene.input.KeyCode; import javafx.scene.shape.Rectangle; import static org.junit.Assert.*; @@ -296,4 +304,26 @@ public class RadioMenuItemTest { assertTrue(b1.isSelected()); assertFalse(result8189677); } + + @Test public void testRadioMenuItemSelectionOnAccelerator() { + MenuBar menuBar = new MenuBar(); + Menu menu = new Menu("Submenu"); + menuBar.getMenus().add(menu); + + ToggleGroup group = new ToggleGroup(); + RadioMenuItem radioMenuItem = new RadioMenuItem("ONE"); + radioMenuItem.setToggleGroup(group); + radioMenuItem.setAccelerator(KeyCombination.valueOf("alt+1")); + menu.getItems().add(radioMenuItem); + + StageLoader s = new StageLoader(menuBar); + Scene scene = s.getStage().getScene(); + KeyEventFirer keyboard = new KeyEventFirer(radioMenuItem, scene); + + keyboard.doKeyPress(KeyCode.DIGIT1, KeyModifier.ALT); + assertTrue(radioMenuItem.isSelected()); + + keyboard.doKeyPress(KeyCode.DIGIT1, KeyModifier.ALT); + assertTrue(radioMenuItem.isSelected()); + } }