【发布时间】:2017-05-02 09:36:35
【问题描述】:
我在 Eclise neon 和 Java 1.8 中使用 WindowsBuilder 编写了一个基本的计算器类型程序。它非常完整,一切都按照我的意愿工作。键盘输入除外。
作为画龙点睛之笔,我想检测 keyTyped 事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。
我在程序类中添加了“实现 KeyListener”...
public class CashRegister implements KeyListener {
private JTextField keyb;
我尝试为一个名为 keyb 的不可见 JTextField 设置一个侦听器......
private void initialize() {
keyb = new JTextField(20);
keyb.addKeyListener(this);
keyb.setFocusable(true);
keyb.requestFocusInWindow();
我还添加了处理捕获的按键的方法...
public void keyTyped (KeyEvent e) {
String out = "";
out = out + e.getKeyChar();
pence1text.setText(out);
}
public void keyPressed (KeyEvent e) {
}
public void keyReleased (KeyEvent e) {
}
所以,在这个阶段,我所期待的,证明它正在工作,是我按下的关键字符出现在名为“pence1text”的文本字段中。但是,它不起作用,当我按 a 键时没有显示任何内容。
我认为这可能是一个焦点问题。谷歌搜索并检查 stackoverlow 导致我添加以下行...
keyb.setFocusable(true);
keyb.requestFocusInWindow();
如上,但仍然没有运气。
有没有人知道我做错了什么,或者我接下来可以尝试什么?
谢谢
【问题讨论】:
-
public boolean requestFocusInWindow()返回的boolean的值是多少?打赌它是false。 -
是的,它返回 false。我认为这就是问题所在。我错过了什么?谢谢。
-
尝试阅读this 文章。使用修饰符
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT注册根窗格的所有操作。 -
“我错过了什么?”documentation,以及方法的“完整描述”链接?
-
Listening for Changes on a Document 将优先于
KeyListener
标签: java eclipse swing keyboard-events windowbuilder