JFrame 内有 JPanel。
在 JPanel 中进行 addKeyListener 实现的代码不能被键盘动作触发;
而在 JFrame 中进行 addKeyListener 实现的代码却能被键盘动作触发;
直接在 JFrame 中用:
KeyListener[] _arKL = jPane.getKeyListeners();
for (int i = 0; i < _arKL.length; i++) {
this.addKeyListener(_arKL[i]);
}
即可将事件传递给 JPanel 中的实现代码,不过觉此法肤浅故请教Swing先人指点一二,不胜感激!
还查阅了部分资料,不知道是不是焦点问题?
在 JPanel 中进行 addKeyListener 实现的代码不能被键盘动作触发;
而在 JFrame 中进行 addKeyListener 实现的代码却能被键盘动作触发;
直接在 JFrame 中用:
KeyListener[] _arKL = jPane.getKeyListeners();
for (int i = 0; i < _arKL.length; i++) {
this.addKeyListener(_arKL[i]);
}
即可将事件传递给 JPanel 中的实现代码,不过觉此法肤浅故请教Swing先人指点一二,不胜感激!
还查阅了部分资料,不知道是不是焦点问题?
> 事件注册到顶层控件是可以响应键盘事件的,但是如果此时控制的控件设置为没有焦点而又存在其他的带焦点的控件的话就会让此键盘事件失效。
1、
KeyStroke shiftup = KeyStroke.getKeyStroke(KeyEvent.VK_UP,java.awt.event.InputEvent.SHIFT_DOWN_MASK);
panel.registerKeyboardAction(this,"shiftup",shiftup,JComponent.WHEN_IN_FOCUSED_WINDOW);
2、registerKeyboardAction()已经是不在被建议使用的方法。建议使用
getInputMap().put(aKeyStroke,aCommand)和getActionMap().put(aCommand,aAction)来组合代替
是对的,不过之前我自己也已经用这个方法解决这个问题了,过来结贴的。呵呵!不过还是要感谢下。