java - 使用 KeyStroke 进行输入,是否有更简单的方法来读取 A - Z 键?

标签 java swing java-io roguelike

首先,这不是用于键盘记录器,它是用于 roguelike 游戏中的输入,其中我的 JFrame 中的 JLabel 会说“姓名:”并且我希望能够输入 A-Za-z。在查看了很多键输入选项之后,我又回到了开始使用 KeyStrokeAction 的地方。

我想知道是否有一种方法可以添加一系列键,而不是重复这 56 次:

Action a = new AbstractAction() {

    public void actionPerformed(ActionEvent e) {
        // add a to string
    }
};
getInputMap().put(KeyStroke.getKeyStroke("a"), "a");
getActionMap().put("a", a);

我的意思是,我可以这样做,只需写一些复制和粘贴,但我真的很讨厌那样。必须有一个比使用 KeyListener 更优雅的解决方案,这不是很好,因为这意味着我必须以某种方式获得焦点,但我的窗口只是一个 JFrame 有一个大JLabel 在里面。

此外,我现在只用了几天 java,所以这就是为什么我可能缺少一个非常普遍的解决方案,但如果有的话,请分享!表示赞赏。

最佳答案

这是一个解决方案:

for (char c = 'a'; c <= 'z'; c++) {
    String ks = String.valueOf(c);
    getInputMap().put(KeyStroke.getKeyStroke(ks), ks);
    getActionMap().put(ks, a);
    ks = ks.toUpperCase();
    getInputMap().put(KeyStroke.getKeyStroke(ks), ks);
    getActionMap().put(ks, a);
}

但我认为您应该更喜欢带有 DocumentListenerJTextField

关于java - 使用 KeyStroke 进行输入,是否有更简单的方法来读取 A - Z 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308492/

相关文章:

java - Java中计算文件行数

Java Transformer 输出 < 和 > 而不是 <>

java - 无法使用 gradle.properties 中定义的变量

java - 将 getText() 与 double 一起使用

java - 在 Java Swing 中实现 MVC 的 Controller 部分

java - 使用 MediaTracker 在 Swing 应用程序中缓存图像

java - 使用 Java 的 File.delete() 方法

java - 如何在事件调用后200ms触发方法?

java - 如何从 Eclipse 运行任意服务器软件?

java - 尝试使用java代码依次执行两个shell脚本