我有一个JFrame
的子类,它使用从JPanel
扩展的类
public class HelloWorld extends JPanel implements KeyListener
我将HelloWorld
对象添加到框架app.add(helloWorld);
中。现在,当我按下任意键盘键时,KeyListener
方法都没有被调用,并且helloWorld
似乎没有窗口焦点。我也尝试过调用helloWorld.requestFocusInWindow();
,但仍然没有响应。
如何使其响应按键?
4条答案
按热度按时间c2e8gylq1#
您是否将
HelloWorld
面板的KeyListener
设置为该面板本身?您可能还需要将该面板设置为可聚焦。我用这段代码测试了它,它似乎可以正常工作50pmv0ei2#
JPanel默认情况下不是Focusable,即不能响应焦点相关事件,也就是说不能响应keyevent。
我会建议尝试将窗格上的setFocusable设置为true,然后再试一次。确保先单击面板,以确保它接收到焦点。
但是,您会遇到奇怪的焦点遍历问题,因为当用户在表单中导航时,面板现在将接收输入焦点,使焦点看起来像是在某个地方丢失了。
此外,
KeyListener
在这种情况下往往是不可靠的(由于焦点管理器的工作方式)。3wabscal3#
简单你必须添加
66bbxpm54#
将其添加到MyFrame方法中;