Java 使用按键输入,有没有更简单的方法来读取A-Z键?

Java 使用按键输入,有没有更简单的方法来读取A-Z键?,java,swing,java-io,roguelike,Java,Swing,Java Io,Roguelike,首先,这不是针对键盘记录器的,而是针对流氓游戏中的输入,我的JFrame中的JLabel将显示“Name:”并且我希望能够键入a-Za-z。在查看了大量按键输入选项后,我回到了开始使用击键s和操作s的位置 我想知道的是,是否有一种方法可以添加一系列键,而不是重复56次: Action a = new AbstractAction() { public void actionPerformed(ActionEvent e) { // add a to string

首先,这不是针对键盘记录器的,而是针对流氓游戏中的输入,我的
JFrame
中的
JLabel
将显示“Name:”并且我希望能够键入a-Za-z。在查看了大量按键输入选项后,我回到了开始使用
击键
s和
操作
s的位置

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

Action a = new AbstractAction() {

    public void actionPerformed(ActionEvent e) {
        // add a to string
    }
};
getInputMap().put(KeyStroke.getKeyStroke("a"), "a");
getActionMap().put("a", a);
我的意思是,我可以这样做,只是写一点复制和粘贴,但我真的很讨厌这样。必须有一个比使用
keylister
更优雅的解决方案,这不是很好,因为这意味着我必须以某种方式聚焦,但我的窗口只是一个
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);
}

for(char c='a';c我正在使用一个内容管理器类,它将每个“屏幕”视为设置为内容窗格的
JPanel
,我将对父JFrame的引用放入基本“屏幕”类,然后向父JFrame添加一个
KeyListener
。这正好捕获了我想要的输入。我以前没有这样做,因为我错误地将
KeyListener
添加到内容窗格中。现在一切似乎都正常

public void run() {
    this.getParent().addKeyListener(new KeyListener() {

        public void keyPressed(KeyEvent e) {
            appendLabel(e.getKeyChar());
        }

        public void keyReleased(KeyEvent e) { }
        public void keyTyped(KeyEvent e) { }
    });
}

谢谢@millimoose!

为什么不简单地使用
JTextField
来捕获输入?我看了这个,但它需要聚焦,需要隐藏,我想使用事件,这样我就可以一次一个键地更新UI。只是好奇,当用户按下a-Za-z键时会发生什么?也许你有更通用的可用性这里有问题吗?尝试一个合适的顶级
组件
@MikeL.:在类似roguelike的游戏中,通常的方法是在一个巨大的文本和ASCII图形矩形中管理整个UI。引擎在顶级捕获大多数键盘输入并自行处理是有意义的。我看不出可用性问题。