diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java index 2f49f8c7..6c74fdef 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java @@ -35,8 +35,6 @@ import javax.swing.Icon; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.KeyStroke; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicHTML; @@ -446,6 +444,10 @@ debug*/ htmlView.paint( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ), textRect ); } + /** + * Returns {@code true} if either the menu item is armed (mouse over item) + * or it is a {@code JMenu} and selected (shows submenu). + */ protected static boolean isArmedOrSelected( JMenuItem menuItem ) { return menuItem.isArmed() || (menuItem instanceof JMenu && menuItem.isSelected()); } @@ -470,23 +472,18 @@ debug*/ if( !menuItem.isEnabled() ) return menuItem.getDisabledIcon(); - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - if( msm != null ) { - MenuElement[] path = msm.getSelectedPath(); - MenuElement selectedElement = path.length > 0 ? path[path.length - 1] : null; - if( menuItem == selectedElement ) { - Icon selectedIcon = menuItem.getSelectedIcon(); - if( selectedIcon != null ) - return selectedIcon; - } - } - if( menuItem.getModel().isPressed() && menuItem.isArmed() ) { Icon pressedIcon = menuItem.getPressedIcon(); if( pressedIcon != null ) return pressedIcon; } + if( isArmedOrSelected( menuItem ) ) { + Icon selectedIcon = menuItem.getSelectedIcon(); + if( selectedIcon != null ) + return selectedIcon; + } + return icon; } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java index a1802256..55d2d9ec 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java @@ -162,6 +162,9 @@ public class FlatMenusTest FlatMenusTest.MenuWithAccelerator menuWithAccelerator2 = new FlatMenusTest.MenuWithAccelerator(); JMenuItem menuItem40 = new JMenuItem(); JMenuItem menuItem39 = new JMenuItem(); + JMenu menu12 = new JMenu(); + JMenuItem menuItem41 = new JMenuItem(); + JMenuItem menuItem42 = new JMenuItem(); menuBar2 = new JMenuBar(); JMenu menu8 = new JMenu(); FlatMenusTest.LargerMenuItem menuItem13 = new FlatMenusTest.LargerMenuItem(); @@ -377,6 +380,25 @@ public class FlatMenusTest menuWithAccelerator1.add(menuItem39); } menuBar1.add(menuWithAccelerator1); + + //======== menu12 ======== + { + menu12.setText("icons"); + + //---- menuItem41 ---- + menuItem41.setText("selected icon"); + menuItem41.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png"))); + menuItem41.setSelectedIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-show_dark.png"))); + menu12.add(menuItem41); + + //---- menuItem42 ---- + menuItem42.setText("disabled icon"); + menuItem42.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png"))); + menuItem42.setDisabledIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-paste.png"))); + menuItem42.setEnabled(false); + menu12.add(menuItem42); + } + menuBar1.add(menu12); } add(menuBar1, "cell 1 0 2 1,growx"); diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd index 5be13f68..1bcac756 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -149,6 +149,23 @@ new FormModel { "accelerator": #KeyStroke0 } ) } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu12" + "text": "icons" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem41" + "text": "selected icon" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png" ) + "selectedIcon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-show_dark.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem42" + "text": "disabled icon" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png" ) + "disabledIcon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-paste.png" ) + "enabled": false + } ) + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 0 2 1,growx" } )