4

我有代码:

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?感谢您的任何帮助!(请不要因为长度问题而故意遗漏进口)

4

2 回答 2

2

来自setMnemonic的文档:

如果焦点包含在此按钮的祖先窗口中的某处,助记符是与外观的无鼠标修饰符(通常是 Alt)结合使用时将激活此按钮的键。

因此使用 setMnemonic 来做到这一点是不可能的。

但是,您可以使用为 s 定义的setAccelerator方法JMenuItem,传递一个类似KeyStroke.getKeyStroke('e');

或者,正如 Joop Eggen 在对此答案的评论中指出的那样,您可以使用MenuKeyListener来更好地控制执行操作的特定事件

于 2013-12-10T23:30:50.293 回答
0

我不知道这是否可行,但您可以尝试一下。从这里(http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_E)我们看到ASCII绑定VK_E是69。这是大写E. 要得到一个小e的它的 101,它对应于VK_NUMPAD5. 不过我可能是错的,这只是一个猜测。

于 2013-12-10T23:33:45.160 回答