有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过一次按键调用MenuItem

我们知道,在需要组合两次击键的情况下,可以借助setaccelerator()方法调用菜单项。如果我只想通过一次击键来调用一个菜单项怎么办。。。这就是我有点问题的地方

menuitem=new JMenuItem("Delete");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE);        
menu.add(menuitem);

请帮帮我


共 (1) 个答案

  1. # 1 楼答案

    有关详细信息,请查看How to Use Menus。下面是一个利用Action定义加速器的示例。您还可以在菜单项上设置加速器,即:item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));

    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    
    import javax.swing.*;
    
    public class MenuDemo {
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    final JFrame frame = new JFrame("Demo");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                    JMenuBar menuBar = new JMenuBar();
                    JMenu menu = new JMenu("Menu");
                    menuBar.add(menu);
    
                    JMenuItem item = new JMenuItem(new TestAction(frame));
    
                    menu.add(item);
    
                    frame.setJMenuBar(menuBar);
    
                    frame.setSize(new Dimension(300, 300));
                    frame.setLocationByPlatform(true);
                    frame.setVisible(true);
                }
            });
        }
    
        static class TestAction extends AbstractAction {
            private Component parent;
    
            public TestAction(Component parent) {
                super("Test");
                this.parent = parent;
                putValue(Action.ACCELERATOR_KEY,
                        KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
            }
    
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(parent, "Test");
            }
        }
    }