java - 一键调用 MenuItem

标签 java swing keystroke jmenu jmenuitem

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

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

请帮忙....!!

最佳答案

检查 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");
        }
    }
}

关于java - 一键调用 MenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856628/

相关文章:

java - 如何知道 paintComponent(Graphics g) 已经完成它的工作 (Java)?

java - 在 JScrollPane 中使用绝对布局

Java - 如何对多个 JTextFields 使用单个 FocusListener?

c - 将变量从 linux 内核传递给进程

java - Websphere 商业类型属性(property)

java - SoX - java 的声音交换

java - 带有 tomcat 的 UrlRewrite 过滤器

java - 交替打印第一个和最后一个数组 (Java)

Java Swing : Key pressed key stroke on an `InputMap` triggers its action several times while holding down the key

java - 如何在 JXDatePicker 上注册 KeyStroke