【问题标题】:Invoking a MenuItem with one keystroke一键调用 MenuItem
【发布时间】:2012-08-08 01:55:48
【问题描述】:

我们知道我们可以在 setaccelerator() 方法的帮助下调用菜单项,其中需要两次击键的组合。如果我想通过一个按键来调用一个菜单项怎么办...这是我遇到一点问题的地方

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

请帮忙....!!

【问题讨论】:

  • 您希望当用户在菜单中时发生这种情况,还是让他们能够在任何地方按一个键并发生相同的功能?如果是第二个,我建议使用键绑定并直接调用操作。

标签: java swing keystroke jmenu jmenuitem


【解决方案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");
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多