当前位置: 首页 > 面试题库 >

将按键发送到JTextField

宗政坚白
2023-03-14
问题内容

我正在尝试模拟输入到中的文本JTextField。我有一个1字符长的字符串,其中包含要添加的字母,然后运行:

receiver.dispatchEvent(new KeyEvent(this,
  KeyEvent.KEY_TYPED, 0,
  this.shifted?KeyEvent.SHIFT_DOWN_MASK:0,
  KeyEvent.VK_UNDEFINED, text.charAt(0)));

但这似乎并没有改变任何内容。我在这里想念什么?


问题答案:

在我看来就像是虚拟键盘:-)

几乎完全相同的代码对我有用。我建议以下内容:

  1. 将目标JTextField(在您的情况下为receiver)作为source参数传递给KeyEvent构造函数,即:

    receiver.dispatchEvent(new KeyEvent(receiver,
    KeyEvent.KEY_TYPED, System.currentTimeMillis(),
    modifiers, KeyEvent.VK_UNDEFINED, keyChar);
    
  2. 确保目标JTextField有重点。

编辑:

为了验证以上建议,我测试了以下代码段:

Frame frame = new Frame();
TextField text = new TextField();
frame.add(text);
frame.pack();
frame.setVisible(true);

text.dispatchEvent(new KeyEvent(frame,
        KeyEvent.KEY_TYPED, 0,
        0,
        KeyEvent.VK_UNDEFINED, 'H'));

这是行不通的,但是,如果对最后一行进行如下修改(目标组件作为构造函数的source参数KeyEvent),则可以正常工作:

text.dispatchEvent(new KeyEvent(text,
        KeyEvent.KEY_TYPED, 0,
        0,
        KeyEvent.VK_UNDEFINED, 'H'));


 类似资料:
  • 问题内容: 在每个单独的击键输入到stdin之后,我想直接将用户的击键发送到通道。 我尝试了下面的代码,但是由于在输入换行符之前该方法一直阻塞,因此无法获得预期的结果。 感谢您对我如何使每个用户输入字符无需换行符即可立即进入频道的任何建议。 问题答案: 默认情况下,Stdin是行缓冲的。这意味着在遇到换行符之前,它不会为您提供任何输入。这不是Go特定的事情。 使它以非缓冲的方式运行是高度特定于平台

  • 我有一个API的正面,我使用邮递员发送一个单一的数字8。 我想用邮递员这样寄 但是现在前面说他们不能在json中发送一个没有键值的单词,我不想创建一个对象只使用一次绑定,我该怎么做呢?

  • 我用苹果脚本做了一个叫做星期五的应用程序。当我告诉它“打开chrome”时,它会打开谷歌chrome,这是在脚本编辑器和脚本编辑器之外工作的。我也可以告诉它“打开一个新标签”,它会用击键打开一个新标签: 现在,上面的代码只在我在脚本编辑器上运行FRIDAY时有效,但在我将FRIDAY保存为应用程序并运行它时无效。 脚本编辑器和我的应用程序(星期五)具有可访问性,实际上星期五具有完整的磁盘可访问性。

  • 发送模拟键击和鼠标点击到活动窗口。 Send Keys SendRaw Keys SendInput Keys SendPlay Keys SendEvent Keys 参数 键 要发送的按键序列. 和其他命令一样, 在首个参数前的逗号可以省略. 原始模式: SendRaw 命令会原样发送所有字符, 而不把 {Enter} 转换成 ENTER 键击, 把 ^c 转换成 Control-C, 等等.

  • 问题内容: 我有一个现有的应用程序,它针对log4j进行所有日志记录。我们使用了许多其他库,它们也使用log4j或对照Commons Logging进行日志记录,而这些日志最终在我们的环境中使用log4j记录。我们的依赖项之一甚至针对slf4j记录日志,它也可以正常工作,因为它最终也可以委托给log4j。 现在,我想为一些缓存需求将ehcache添加到此应用程序。先前版本的ehcache使用com

  • 我正在尝试使用Vertx上传一个文件,该请求是一个包含PDF的POST请求,我的处理程序如下所示(我从github中的一个示例中获取了代码): 根据上面的评论,我不能只尝试这样的事情(它实际上显示了一个错误): 我一直在检查MessageCodec,但我不清楚如何将其应用于这种情况。 注意:此escenario必须使用eventbus。