QSt*_*orm 5 java swing key-bindings
的默认操作F10是显示窗口菜单。但是,我想禁用此功能。
更新: 背景:如果用户按下任何键,我想在JTextField中实现一种特殊的行为。不幸的是,JTextField在F10按下时无法获取事件,因为它被窗口捕获(并且显示了菜单)。
有谁知道如何在窗口中禁用此键绑定?
我试图在根窗格中禁用它,但没有成功:
frame.getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");
Run Code Online (Sandbox Code Playgroud)
我进行了很多搜索,但没有找到解决该问题的方法。也许你们当中的一个知道答案。
UPDATE2 这里是重现此行为的代码示例:
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
final JTextField edit = new JTextField();
edit.setEditable(false);
edit.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(final KeyEvent ke) {
edit.setText(KeyEvent.getKeyText(ke.getKeyCode()));
}
});
final JFrame frame = new JFrame("DEMO");
frame.setSize(320, 240);
frame.getContentPane().add(edit);
frame.setVisible(true);
}
});
Run Code Online (Sandbox Code Playgroud)
}
请注意:根据“ setDefaultLookAndFeelDecorated”设置为true还是false,会有不同的行为。
提前致谢 :)
我试图在根窗格中禁用它,但没有成功:
查看Key Bindings以了解所有 Swing 组件的绑定。
您将看到F10密钥绑定到JMenuBar. 所以你应该能够使用:
menuBar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");
Run Code Online (Sandbox Code Playgroud)
编辑:
错过了您没有菜单栏的重点。
看来您不能只是将绑定设置为“无”。看起来 Swing 仍在搜索树以查找要执行的操作。您需要提供一个什么都不做的虚拟操作:
Action action = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("do nothing");
}
};
JPanel content = (JPanel)frame.getContentPane();
String key = "F10";
KeyStroke f10 = KeyStroke.getKeyStroke( key );
frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(f10, key);
frame.getRootPane().getActionMap().put(key, action);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |