关于setMnemonic的一些问题

时间:2013-12-10 23:27:00

标签: java swing mnemonics

我有代码:

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?感谢您的帮助! (请注意,对于长度问题,我不会将导入物整体留下来)

2 个答案:

答案 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。我可能错了,只是一个猜测。