每次我尝试添加我的所有键输入到我的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发现了一个实际的错误。
答案 0 :(得分:1)
假设 KeyInput
是KeyListener
的一个实例,那么你"应该"使用java.awt.Component
中定义的addKeyListener
(javax.swing.JFrame
继承)
但是,执行此操作可能会导致许多问题。因为您将侦听器添加到基础框架,所以您忽略了它与用户之间存在多个组件的事实,所有这些组件都可能消耗该事件或窃取焦点
KeyListener
只会在注册到的组件时响应关键事件:
这意味着同样响应键盘输入的其他组件可以窃取键盘焦点,并且不再触发您的聆听者。这是KeyListener
的一个非常常见的问题,已通过Key bindings API