【发布时间】:2014-06-12 15:18:50
【问题描述】:
示例代码:
public class FrameMenuTextFieldTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame();
frame.getContentPane().add(new JTextField());
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenuItem item = new JMenuItem("Item1");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Menu Item clicked");
}
});
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_5, 0));
menu.add(item);
menubar.add(menu);
frame.setJMenuBar(menubar);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
这里的问题是,如果我在文本字段中输入5,不仅文本字段会收到此事件,菜单项也会收到此事件,并执行其操作;显示消息。
禁用按键事件传播到菜单栏的最简单方法是什么?
我是我的真实应用程序,我有很多菜单项要针对一些文本字段禁用。
【问题讨论】:
-
我认为不使用任何修饰符是不可能的。您能否在帖子中指定您不想使用任何修饰符。以便您得到正确的答案。
-
即使你指定了一个修饰符,例如SHIFT+5,然后在文本字段中输入SHIFT+5,菜单项的动作将被执行。
-
我已经编辑了我的帖子。
标签: java swing jtextfield jmenuitem jmenubar