当前位置: 首页 > 知识库问答 >
问题:

无法使用WindowBuilder SWING UI设置键盘输入的焦点

唐焕
2023-03-14

我在Eclise neon和Java 1.8中使用WindowsBuilder编写了一个基本的计算器类型程序。这几乎是完整的,一切都按我希望的方式进行。除了键盘输入。

作为最后一步,我想检测keyType事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。

我在程序类中添加了“实现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();

如上,但仍然没有运气。

有人知道我做错了什么,或者我下一步可以尝试什么吗?

谢谢

共有2个答案

郝杰
2023-03-14

作为最后一步,我想检测keyType事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。

不要使用KeyListener。

相反,您应该使用密钥绑定。阅读Swing教程中关于如何使用密钥绑定的部分以获取基本信息。

另请参阅:如何将actionlistenerand actioncommand放置到多个JButton,这是一个工作示例,展示了如何将键绑定应用到计算器。

梅庆
2023-03-14

感谢用户Andrew Thompson将我带回文档并重新阅读。

问题是JTextField是不可见的,因此无法获得焦点。如果我将侦听器添加到可见的文本字段中,那么程序可以正常工作。但是,如果用户使用鼠标单击按钮,它会失去焦点并破坏实现...所以我需要重新考虑代码并继续查看焦点设置。

 类似资料:
  • 问题内容: 我正在尝试用C语言编写一个程序(在Linux上),该程序将循环直到用户按下某个键为止,但不要求按下键盘来继续每个循环。 有没有简单的方法可以做到这一点?我认为我可以做到这一点,但这似乎需要大量工作。 或者,有没有办法在程序关闭之前捕获- 按键进行清理,而不是非阻塞io? 问题答案: 如前所述,您可以使用ctrl-c 陷阱或任何标准输入。 但是请注意,使用后一种方法时,您还需要设置TTY

  • null 任何帮助都将不胜感激。

  • 本文向大家介绍Android 设置Edittext获取焦点并弹出软键盘,包括了Android 设置Edittext获取焦点并弹出软键盘的使用技巧和注意事项,需要的朋友参考一下 Android 设置Edittext获取焦点并弹出软键盘 ps:android页面进入edittext自动获取焦点,弹出软键盘解决方法 在edittext的父布局中加入上面2个属性 以上就是本文的全部内容,希望本文的内容对大

  • 是否隐藏聊窗键盘区域预览图片长图、GIF标识 /** 是否隐藏聊窗键盘区域预览图片长图、GIF标识 @param isHidden 是否隐藏(默认显示) */ [Ntalker ntalker_isHiddenLongImageOrGifLogo:NO];

  • 问题内容: 我正在尝试在Java控制台应用程序中输入信息,但似乎无法运行它。 这是我的Java文件的样子: 但是我得到了错误: 我的源文件夹中有一个keyboard.class文件。我将Eclipse与Ubuntu结合使用。 问题答案: 表示无法编译代码。 您必须导入Keyboard,类似 当您使用不同包中的类(不是当前类的同一包)时,必须导入该类。如果该类也位于同一包中,则无需导入。 通常将类分