繁体   English   中英

你如何制作菜单项(JMenuItem)的快捷方式?

[英]How do you make menu item (JMenuItem) shortcut?

所以我注意到在awt中有一个MenuItem构造函数用于添加CTRL +(某些键)快捷方式,但是JMenuItem没有这样的构造函数。 这样做的正确方法是什么?

我需要一个平等的awt:

MenuItem mi = new MenuItem("Copy", new MenuShortcut(KeyEvent.VK_C));

但对于Swing。

CTRL + N的示例。

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

Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()在Windows和Linux上返回控制键(ctrl),在Mac OS上返回命令键(⌘)。

只需创建一个KeyStroke并在JMenuItem上调用setAccelerator(...) ,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM