专注于“alt”键按下的第一个jmenubar项目

时间:2011-12-28 15:32:16

标签: java swing jmenu jmenubar alt-key

当用户按下“ALT”键时,有没有办法在我的jmenubar中自动选择jmenu? (像Windows软件一样)

问题是,当按下“ALT”键时,我的jframe的默认行为是显示一个包含以下操作的菜单:恢复,移动,大小,缩小,......

我希望我的java应用程序要做的是在按下“alt”时选择我的jmenu第一项。 (就像它与助记符一样:“alt + f”)

4 个答案:

答案 0 :(得分:7)

将操作添加到ActionMap的{​​{1}}和InputMap。见下文:

JRootPane

答案 1 :(得分:0)

使用JComponent的actionmap和inputmap来完成这项工作。由于JFrame不是JCompoenent的后代,我建议你将JPanel添加到你的jframe然后,

Action action = new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            jMenu1.doClick();
        }
    };
    jPanel1.getActionMap().put("myAction", action);
    jPanel1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ALT, KeyEvent.ALT_DOWN_MASK), "myAction");

答案 2 :(得分:0)

我发现响应非常有用,但也有缺点。

想象一下你正在使用Cross PlatForm L& F(Metal),你已经为所有菜单定义了助记符;你知道那些菜单是按下来调用的。因此,如果我们把黑熊猫提供的解决方案放在按下的结果上,我们首先会看到部署所需的菜单,但在切换到第一个菜单后立即显示。

我认为最好的方法是在ALT上按下只应该选择第一个菜单但不显示其内容(那些内容应该按下向下按键)。在Cross Platform L& F中有没有办法做到这一点?

或者,有另一种方法可以在没有任何额外代码的情况下继续。如果我们调用系统L& F(在我的情况下是Windows),则ALT键的行为符合要求。有关详细信息,请参阅stackoverflow问题13474555.

答案 3 :(得分:0)

我发现只是使用frame.setJMenuBar(jmenubar);,其中frame是您的JFrame而jmenubar是您的JMenuBar,它会自动执行此操作。您甚至不必将其添加到布局管理器中。