Java KeyListener从不工作(在setFocusable+requestFocusInWindow之后)

Java KeyListener从不工作(在setFocusable+requestFocusInWindow之后),java,swing,keylistener,Java,Swing,Keylistener,在JComponent对象中添加setFocusabletrue和requestFocusInWindow后,我的KeyListener仍然无法工作。有人能找到问题吗 公共类画布扩展JComponent{ 公众拉票{ this.str=str; 此.setPreferredSizeNewDimension700300; setFocusabletrue; 请求聚焦窗口; addKeyListenernew KeyAdapter{ public void keyTypedKeyEvent e{ o

在JComponent对象中添加setFocusabletrue和requestFocusInWindow后,我的KeyListener仍然无法工作。有人能找到问题吗

公共类画布扩展JComponent{ 公众拉票{ this.str=str; 此.setPreferredSizeNewDimension700300; setFocusabletrue; 请求聚焦窗口; addKeyListenernew KeyAdapter{ public void keyTypedKeyEvent e{ out.printlin; 抛出新的UnsupportedOperationExceptionNot supported。//若要更改生成的方法体,请选择工具|模板。 } public void keyPressedKeyEvent e{ out.printlin; 抛出新的UnsupportedOperationExceptionNot supported。//若要更改生成的方法体,请选择工具|模板。 } public void keyereleasedkeyevent e{ out.printlin; 抛出新的UnsupportedOperationExceptionNot supported。//若要更改生成的方法体,请选择工具|模板。 } }; } 我希望当按下任何键时,控制台中都会显示in。谢谢

在JComponent对象中添加setFocusabletrue和requestFocusInWindow后,我的KeyListener仍然无法工作

在将组件添加到框架中或使其可见之前,您不能请求对组件进行聚焦。因此,在构造函数中请求聚焦不会起任何作用

基本逻辑需要是:

CustomComponent component = new CustomComponent(...);
frame.add( component );
frame.pack();
frame.setVisible( true );
component.requestFocusInWindow();
注意我调用了组件CustomCompent,因为已经有一个名为Canvas的AWT类,这可能会让人混淆。创建类时请使用更具描述性的名称

另一个选项是重写类的addNotify方法以调用requestFocusInWindow方法


好奇-你是如何使用这个类的?@DevilsHnd我用它来实现一个小的painter应用程序。keyListener用于构建文本框。这对我来说很有用!非常感谢,@camickr。我浏览了所有其他解决方案,没有人提到我不能要求关注某个组件!感谢你的洞察力!
@Override
public void addNotify()
{
    super.addNotify();
    requestFocusInWindow();
}