我尝试向KeyListener
添加JFrame
。这很好用。
JFrame frame = new JFrame();
[...]
frame.addKeyListener(new KeyListener() { [...] });
然而,当我专注于某个按钮或JTextField
时(就像我点击它时),KeyListener
将不会对我的按钮推动作出反应。
你知道如何解决这个问题吗?
答案 0 :(得分:3)
你知道如何解决这个问题吗?
是的,使用密钥绑定而不是KeyListener
。即使绑定组件没有焦点,绑定也可以设置为有效,这是它们的关键优势之一(没有双关语意)。可以在此处找到该教程:Key Bindings Tutorial。
请注意,当您从绑定组件中获取InputMap
时,请确保使用正确的条件,即
InputMap inputMap = myComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
每个组件有三个输入映射,当组件保存在当前活动的顶级窗口(例如JFrame
)时,上面的组件将处于活动状态。这意味着即使组件本身没有焦点,绑定也会起作用。
你可以在这里找到一些使用Key Bindings的示例程序,通常与Swing动画结合使用: