MenuItem: use isArmedOrSelected() instead of MenuSelectionManager to detect selected item

This commit is contained in:
Karl Tauber
2021-12-07 22:46:39 +01:00
parent 6b880af447
commit 802dd08ce7
3 changed files with 50 additions and 14 deletions

View File

@@ -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;
}

View File

@@ -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");

View File

@@ -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"
} )