如题比如
JMenuItem a = new JMenuItem("确定");
a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK));我想让快捷键Ctrl+a 和Ctrl+b都起作用怎么办?
JMenuItem a = new JMenuItem("确定");
a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK));我想让快捷键Ctrl+a 和Ctrl+b都起作用怎么办?
menu.setMnemonic(KeyEvent.VK_A);其中VK_A 就是 快捷键 Alt+A A 你可以修改为任何一个字符
设置子菜单的快捷键是
cbMenuItem.setMnemonic(KeyEvent.VK_C);
cbMenuItem.addItemListener(this);
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;import javax.swing.*;public class T
{
public static void main(String[] args)
{
final JFrame f = new JFrame();
JMenuBar mb = new JMenuBar();
JMenu fm = new JMenu("File");
JMenuItem mi = new JMenuItem("Test");
mb.add(fm);
fm.add(mi);
KeyStroke keyStroke1 = KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK);
KeyStroke keyStroke2 = KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK);
mi.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke1, "doClick");
mi.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke2, "doClick");
mi.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(f, "Test");
}
});
f.setJMenuBar(mb);
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
对JMenuItem添加KeyListener
在keyPressed方法中先判断Ctrl键是否按下
再判断a,b键有没有按然后响应.但是可能会有焦点问题,因为打开窗体时键盘焦点不在JMenuItem上.
用setFocusable()去给JMenuItem添加焦点没有实践过,仅作参考