当用户按下“ALT”键时,有没有办法在我的jmenubar中自动选择jmenu? (像Windows软件一样)
问题是,当按下“ALT”键时,我的jframe的默认行为是显示一个包含以下操作的菜单:恢复,移动,大小,缩小,......
我希望我的java应用程序要做的是在按下“alt”时选择我的jmenu第一项。 (就像它与助记符一样:“alt + f”)
答案 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,它会自动执行此操作。您甚至不必将其添加到布局管理器中。