我已经阅读了几个主题,展示了如何创建一个KeyBinding,但是,它们都没有完全适合我。我的JFrame有一个JMenuBar,对于菜单项,NetBeans正在生成如下代码:
mniExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
mniExit.setText(bundle.getString("Menu.File.Exit")); // NOI18N
mniExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mniExitActionPerformed(evt);
}
});
mnuFile.add(mniExit);
但是,隐藏菜单时,只有此绑定不可见。我尝试过类似的东西:
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(mniExit.getAccelerator(), "exit");
getRootPane().getActionMap().put("exit", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
mniExit.doClick();
}
});
但它根本行不通。我做错了什么?
提前致谢!
答案 0 :(得分:1)
你说明了
但是,隐藏菜单时,只有此绑定不可见。我尝试过类似的事情:
我猜这里,但我不确定如果按钮或菜单不可见,可以点击它。为了简化,我将创建一个ExitAction类,一个从AbstractAction扩展的类,它被指定为需要它的任何JMenuItems,JButton或Key Bindings的Action。如果它们共享相同的ExitAction对象,则可以根据需要一次性禁用Action(以及相应的菜单项和按钮)。
如果这没有帮助,请再次创建并发布minimal example program,您可以在其中创建运行,编译,不需要外部依赖项(图像,数据库)的最小程序,并向我们展示您的问题。