作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,这不是用于键盘记录器,它是用于 roguelike 游戏中的输入,其中我的 JFrame
中的 JLabel
会说“姓名:”并且我希望能够输入 A-Za-z。在查看了很多键输入选项之后,我又回到了开始使用 KeyStroke
和 Action
的地方。
我想知道是否有一种方法可以添加一系列键,而不是重复这 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);
}
但我认为您应该更喜欢带有 DocumentListener
的 JTextField
。
关于java - 使用 KeyStroke 进行输入,是否有更简单的方法来读取 A - Z 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308492/
我是一名优秀的程序员,十分优秀!