获得对JPanel的关注

Vla*_* T. 18 java swing focus jpanel

我有一个JPanel内部JFrame.我已经注册了一个KeyListener,基于此我想要更新JPanel.我遇到的问题是我不能把注意力集中在上面JPanel,因此我KeyListener不会工作.我已经知道它KeyListener是功能性的,因为我用JFrame它注册了它并且它工作正常.我的代码目前是这样的:

myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这样的问题吗?我有什么遗漏吗?

PS:我没有任何组件,JPanel我只是在背景上绘制一个图像,所以我需要把焦点放在JPanel本身而不是内部的东西上.

Dav*_*lle 22

虽然您指示面板可以对焦,但面板不会要求对焦.尝试使用myPanel.requestFocus();.

  • 它可能取决于您何时调用它。例如,不要在JPanel的构造函数中调用它,因为在显示面板之前会调用它。 (3认同)

Law*_*Dol 6

使用setFocusable(true)然后requestFocusInWindow().但后者必须完成之后由含有面板窗口可见,而您可能需要注册一个窗口监听器并执行requestFocusInWindow()窗口激活处理程序代码.

注:后具体的窗口可见的,不只是打电话后setVisible(true).