我JPanel
内有JFrame
。我已经注册了KeyListener
,我希望根据该JPanel
更新JPanel
。我遇到的问题是我无法将注意力集中在KeyListener
上,因此我的KeyListener
将无效。我已经知道JFrame
是有用的,因为我在myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);
注册了它,它运行正常。我的代码目前是这样的:
JPanel
之前有没有人遇到这样的问题?我有什么遗漏吗?
P.S。:{{1}}里面没有任何组件我只是在背景上画一个图像,所以我需要把焦点放在JPanel本身而不是内部的东西上。
答案 0 :(得分:21)
虽然您指示面板可以对焦,但面板不会要求对焦。尝试使用myPanel.requestFocus();
。
答案 1 :(得分:6)
使用setFocusable(true)
,然后requestFocusInWindow()
。但后者必须在 之后 完成包含面板的窗口可见,为此你可能需要注册一个窗口监听器并执行requestFocusInWindow()
窗口激活了处理程序代码。
注意:特别是在 窗口可见之后,而不是在调用setVisible(true)
之后。
答案 2 :(得分:2)
尝试
panel.setFocusable(true);
panel.setRequestFocusEnabled(true);
// some code here
panel.grabFocus();
答案 3 :(得分:1)
我有时会遇到类似的问题。我注意到在某些情况下最好制作或请求专注于框架内的面板内的特定控件(例如,您希望键盘输入的输入框),而不是请求焦点窗格本身。
答案 4 :(得分:1)
尝试这样的事情:
myFrame.addFocusListener(new FocusAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void focusGained(FocusEvent aE) {
myPanel.requestFocusInWindow();
}
});