How do you make menu item (JMenuItem) shortcut?

后端 未结 2 586
借酒劲吻你
借酒劲吻你 2020-12-31 02:11

So i noticed that in awt there is a MenuItem constructor for adding a CTRL + (some key) shortcut, but there is no such constructor for JMenuIte

相关标签:
2条回答
  • 2020-12-31 02:51

    Example for CTRL + N.

    menuItem.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()));
    

    Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask() returns control key (ctrl) on Windows and linux, and command key (⌘) on Mac OS.

    0 讨论(0)
  • 2020-12-31 02:51

    Simply create a KeyStroke and call setAccelerator(...) on the JMenuItem like so:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
    import java.awt.Toolkit; 
    
    public class Test {
    
        public Test() {
            initComponents();
        }
    
        public static void main(String[] args) {
            //create Swing components on EDT
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new Test();
                }
            });
        }
    
        private void initComponents() {
            //create JFrame
            JFrame frame = new JFrame("Accelerator Sample");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JMenuBar menuBar = new JMenuBar();//create menu bar to hold menus
            JMenu menu = new JMenu("File");//create a menu
            menuBar.add(menu);//add menu to bar
    
            JMenuItem menuItem = new JMenuItem("Say Hello");//create menu item
    
            //set shortcut CTRL+H (command+h on mac os)
            KeyStroke ctrlH = KeyStroke.getKeyStroke(KeyEvent.VK_H, Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask());
    
            //set the accelerator
            menuItem.setAccelerator(ctrlH);
            //add listener which will be called when shortcut is pressed
            menuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    System.out.println("Hello, World");
                }
            });
    
            menu.add(menuItem);//add item to menu 'File'
    
            frame.setJMenuBar(menuBar);//set menubar of JFrame
            frame.pack();
            frame.setVisible(true);//set frame visible
        }
    }
    
    0 讨论(0)
提交回复
热议问题