我正在处理一个问题,我似乎无法获得关于Japplet的JComponent子组件的焦点。我需要关注组件,以便我可以使用键盘监听器为多个屏幕元素(游戏)注册按键。子JComponent尽管可见,但无法获得焦点,启用为真
下面的代码:
class TestApplet extends JApplet {
public void init(){
setSize(400, 800);
new test class();
setFocusable(true);
setVisible(true);
}
}
public class testclass extends JPanel {
public testclass() {
grabFocus();
requestFocus();
requestFocusInWindow();
System.out.println("visible: " + isVisible());
System.out.println("Enbled " + isEnabled());
System.out.println("Focusable " + isFocusable());
System.out.println(isFocusOwner());
}
}
输出的计算结果为
visible: true
Enbled true
Focusable true
false
尽管这是我用过的重点可能是每一个抓comination为子的事实。如果我把相同的代码放到Japplet中,我创建的键盘监听器可以工作,但不会在我使用子组件时起作用...
由于我在分层地形中有许多JPanel,
N.B有人提出这可能是一个macosx特定的错误 - 我使用Intellij CE11.1。虽然我无法验证这一点。
更新:我还必须创建程序应该响应mb1,2和鼠标中键的功能 - 显然这是不可能没有焦点?
这是又一个理由努力避免在Swing应用程序中使用KeyListeners。我相信你已经在其他地方读过,你应该使用键绑定来代替。 –
不是之前没有。我正在研究目前的解决方案,同时完善我愚蠢的散步。 :) –
考虑发布一个[sscce](http://sscce.org),一个小型可编译和可运行的小程序,不需要外部资源(即图像不能在线提供),我们可以运行,测试和修改,也许可以帮助你正确。 –