获得对JPanel的关注

我在JFrame有一个JPanel 。 我已经注册了一个KeyListener ,我想根据它更新JPanel 。 我遇到的问题是我无法将注意力集中在JPanel ,因此我的KeyListener将无法工作。 我已经知道KeyListener是有用的,因为我用JFrame注册它并且它工作正常。 我的代码目前是这样的:

 myFrame.setFocusable(false); myPanel.setFocusable(true); myPanel.addKeyListener(myKL); myFrame.add(myPanel); 

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

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

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

使用setFocusable(true)然后使用requestFocusInWindow() 。 但后者必须在包含面板的窗口可见后才能完成,为此你可能需要注册一个窗口监听器并在窗口激活的处理程序代码中执行requestFocusInWindow()

注意:特别是在窗口可见之后,而不是在调用setVisible(true)

尝试

 panel.setFocusable(true); panel.setRequestFocusEnabled(true); // some code here panel.grabFocus(); 

我有时会遇到类似的问题。 我注意到在某些情况下,最好是在框架内的面板内制作或请求专注于特定控件(例如,您希望键盘输入的输入框),而不是请求焦点。窗格本身。

尝试这样的事情:

  myFrame.addFocusListener(new FocusAdapter() { /** * {@inheritDoc} */ @Override public void focusGained(FocusEvent aE) { myPanel.requestFocusInWindow(); } });