(Java) 我可以使用KeyListener 来输入文字吗? (内部事件调度线程)

(Java) Can I use KeyListener to input text? (inside event dispatching thread)

我正在构建一个完全在单个 JPanel 对象中绘制(所有内容,包括菜单)的 Swing 游戏。我在这个 JPanel 中有一个游戏循环,它处理从更新游戏状态到绘制游戏等所有事情。

现在,我需要以某种方式让玩家能够在某些菜单中输入他们自己的文本。创建新的玩家资料,保存一些其他信息等。我似乎找不到这样做的好方法。使用 Scanner 显然是不可能的,因为这样做会中断事件调度线程,当场冻结游戏(我很难学到)。

我得出的结论是,唯一的方法是使用 KeyListener 以某种方式记录我在键盘上按下的键。我一直在试验它的 keyTyped 方法,但我的结果很差。我已经能够让它记录我的按键,但问题是,它记录了我按下的每个键,包括退格键、控制键、TAB 等等……另外,我输入的每个字符都输出大写,无论我是否打开了 Caps Lock。

我希望你能理解我在这里想要实现的目标。所以我真正的问题是:有没有什么简单的方法可以使用 KeyListener 记录打字?或者在事件调度线程中是否可以使用其他方式?

您的选择是:

  1. 使用标准 popup dialog 并以这种方式获取文本
  2. 将文本字段嵌入面板以接收输入

问题是 KeyListener 只是监听按键事件。标准文本输入组件将其与 DocumentListener 结合用于处理文本