我有代码:
public class MenuBar extends JFrame {
public MenuBar() {
initUI();
}
public final void initUI() {
JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
JMenuItem eMenuItem = new JMenuItem("Exit");
JMenuItem oMenuItem = new JMenuItem("Open Another");
eMenuItem.setMnemonic(KeyEvent.VK_E);
oMenuItem.setMnemonic(KeyEvent.VK_O);
eMenuItem.setToolTipText("Exit application");
oMenuItem.setToolTipText("Open another Window");
eMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
oMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
main(null);
}
});
file.add(eMenuItem);
file.add(oMenuItem);
menubar.add(file);
setJMenuBar(menubar);
setTitle("Simple menu");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MenuBar ex = new MenuBar();
ex.setVisible(true);
}
});
}
}
它运行良好,但我有一个关于setMnemonic的问题。与Alt+E相反,你会如何让eMenuItem的助记符只按E?感谢您的帮助!(为了长度问题,我故意省略了进口)
来自setMnemonic:的文档
助记符是与外观和感觉相结合时的关键如果焦点为包含在此按钮的祖先窗口中的某个位置。
因此,使用setMnemonic来做到这一点是不可能的。
但是,您可以使用为JMenuItem
s定义的setAccelerator方法,传递类似KeyStroke.getKeyStroke('e');
的键击
或者,正如Joop Eggen在本答案的评论中指出的那样,您可以使用MenuKeyListener,它可以更好地控制执行操作的特定事件。
我不知道这是否可行,但你可以尝试一下。由此(http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_E)我们看到CCD_ 3的ASCII绑定是69。这是大写的E
。为了得到小e
的一个,它的101对应于VK_NUMPAD5
。不过我可能错了,这只是猜测。