在尝试将其添加到我的JFrame时,KeyListener总是给我一个错误

时间:2017-09-25 00:35:04

标签: java eclipse swing graphics keylistener

每次我尝试添加我的所有键输入到我的JFrame的单独类时,Eclipse告诉我这样做:frame.add(frame, new KeyInput());,它返回错误:

Exception in thread "main" java.lang.IllegalArgumentException: adding container's parent to itself

。我理解这个错误及其来源:

frame.add(frame, new KeyInput());
          ^^^^^

,但如果我取出框架组件,我会收到错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method add(Component) in the type Container is not applicable for the arguments (KeyInput)

这个我不明白,但得到了要点:Eclipse发现了一个实际的错误。

1 个答案:

答案 0 :(得分:1)

假设 KeyInputKeyListener的一个实例,那么你"应该"使用java.awt.Component中定义的addKeyListenerjavax.swing.JFrame继承)

How to write key listeners

进一步概述了这一点

但是,执行此操作可能会导致许多问题。因为您将侦听器添加到基础框架,所以您忽略了它与用户之间存在多个组件的事实,所有这些组件都可能消耗该事件或窃取焦点

JRootPane

KeyListener只会在注册到的组件时响应关键事件:

  • 可以专注
  • 并具有键盘焦点

这意味着同样响应键盘输入的其他组件可以窃取键盘焦点,并且不再触发您的聆听者。这是KeyListener的一个非常常见的问题,已通过Key bindings API

解决