java - 关于setMnemonic的一些问题

标签 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?感谢您提供的所有帮助! (请注意,由于长度问题,我故意没有导入)

最佳答案

来自docs设置助记符:

The mnemonic is the key which when combined with the look and feel's mouseless modifier (usually Alt) will activate this button if focus is contained somewhere within this button's ancestor window.

因此使用 setMnemonic 做这件事是不可能的。

但是,您可以使用 setAcceleratorJMenuItem 定义的方法,传递像 KeyStroke.getKeyStroke('e');

这样的击键

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

关于java - 关于setMnemonic的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507526/

相关文章:

java - 尝试使用 Java 从 AWS Gateway 获取 HTTP header 等

java - 如何从自定义组件捕获事件

Java socket BufferedReader一次从循环中读取所有输入

java - 有没有人有实现比较器的有用助记符?

java - 如何将助记符放在角色的第二个实例(Java-Swing)下?

assembly - 汇编指令数据库?

java - 我应该在 Post 方法中设置哪个 IP 地址?

java - 复杂的正则表达式从字符串中获取值

java - 允许用户将应用程序的链接发送给另一个人,然后在单击时打开应用程序

java - JTable 拉伸(stretch)到 ScrollPane 的大小