我想在使用 SWING 的游戏中添加键盘快捷键。到目前为止,我一直在使用以下代码:
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) { ... }
出于测试目的,我想创建此应用程序的两个实例(测试网络播放)。问题是当我使用热键时,非焦点窗口会抓住焦点。(后来创建的窗口。)
我怀疑问题在于
KeyboardFocusManager.getCurrentKeyboardFocusManager()
是一个静态方法(两个实例都从同一个 JVM 启动)。
我能想到的唯一另一个选择是让每个组件将它们的关键事件委托给祖先 JFrame,并在一个地方处理它们,但这会涉及大量的锅炉位置代码,我认为这将是一个丑陋的解决方案。
此外,在正常游戏过程中不会出现这些问题,它只会在我测试时让我烦恼。