我有代码:
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的问题。你会如何为eMenuItem制作助记符只是为了按E而不是Alt + E?感谢您的帮助! (请注意,对于长度问题,我不会将导入物整体留下来)
答案 0 :(得分:2)
来自setMnemonic的docs:
助记符是与外观相结合的关键 无鼠标修改器(通常是Alt)将激活此按钮,如果焦点是 包含在此按钮的祖先窗口内的某处。
因此使用setMnemonic来做这件事是不可能的。
但是,您可以使用为JMenuItem
定义的setAccelerator方法,通过类似KeyStroke.getKeyStroke('e');
或者,正如Joop Eggen在对此答案的评论中指出的那样,您可以使用MenuKeyListener来更好地控制对该动作执行的特定事件。< / p>
答案 1 :(得分:0)
我不知道这是否有用,但你可以尝试一下。从这个(http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_E)我们看到VK_E
的ASCII绑定是69.这是大写E
。获得小e
的101,其对应VK_NUMPAD5
。我可能错了,只是一个猜测。