我使用 Eclise neon 和 Java 1.8 中的 WindowsBuilder 编写了一个基本的计算器类型程序。它已经非常完整了,一切都按照我想要的方式进行。除了键盘输入。
作为最后的润色,我想检测 keyTyped 事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。
我已将“implements 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();
如上所述,但仍然没有运气。
有谁知道我做错了什么,或者我下一步可以尝试什么?
谢谢
最佳答案
感谢用户 Andrew Thompson 指示我返回文档并重新阅读。
问题是 JTextField 不可见,因此无法获得焦点。如果我将监听器添加到可见的文本字段中,则程序可以正常工作。但是,如果用户使用鼠标单击按钮,它就会失去焦点并破坏实现......所以我需要重新考虑代码并继续查看焦点设置。
关于java - 无法使用 WindowBuilder SWING UI 设置键盘输入焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43734586/