首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在JTextArea上调度关键事件不会移动插入符号

在JTextArea上调度关键事件不会移动插入符号
EN

Stack Overflow用户
提问于 2015-05-08 00:26:37
回答 2查看 375关注 0票数 2

我想模拟JTextArea上的按键。我会使用机器人类,但是我想输入的窗口没有焦点。所以我有一个这样的场景:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Test {
  public static void main(String[] args) {
    Frame frame = new Frame();
    JTextArea text = new JTextArea();
    frame.add(text);
    frame.pack();
    frame.setVisible(true);

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

但是在输入H之后,插入符号没有向右移动,这导致L在H之前被键入:区域中的最后文本是LH,但我希望它是HL。

我可以在H和L之间分派一个新的键事件,该事件将向右移动插入符号(右箭头)或调用setCaretPosition,但我正在寻找一个解决方案,该解决方案不会手动移动插入符号,行为就像输入的人(我正在为测试来自学生的作业做测试人员)。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-11 07:28:10

Steve更改默认插入符号的解决方案运行良好,但还有另一种解决方案,即执行主线程中的所有键按,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.awt.EventQueue.invokeLater(new Runnable() {
  public void run() {
    // dispatch the event now
    text.dispatchEvent(new KeyEvent(text, KeyEvent.KEY_TYPED, 0, 0, KeyEvent.VK_UNDEFINED, 'H'));
  }
});

似乎在主线程中分派KeyEvents时,它们会自动移动插入符号。对我来说这似乎是最好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2015-05-08 01:16:44

自定义插入符以始终更新其位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final DefaultCaret caret = new DefaultCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
text.setCaret(caret);

来自DefaultCaret JavaDoc

允许使用下列更新策略: NEVER_UPDATE:插入符号保持在文档中相同的绝对位置,而不考虑任何文档更新,除非由于删除而使文档长度小于当前插入符号位置。在这种情况下,插入符号的位置将调整到文档的末尾。在使用此策略时,插入符号不试图通过滚动关联视图来保持自身可见。 ALWAYS_UPDATE:插入符号总是跟踪文档更改。对于常规的更改,如果插入发生在当前位置之前或在当前位置,则增加其位置;如果删除发生在当前位置之前,则减小位置。对于撤消/重做更新,它总是移动到发生更新的位置。插入符号还试图通过调用adjustVisibility方法来保持自身可见。 UPDATE_WHEN_ON_EDT:如果在事件调度线程上执行文档更新,则执行类似于ALWAYS_UPDATE的操作;如果在其他线程上执行更新,则类似于NEVER_UPDATE。 默认属性值为UPDATE_WHEN_ON_EDT。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30119201

复制
相关文章
在 Kubernetes 上用 Krustlet 调度 WASM
Krustlet 往前踏了一小步:他的官方描述是“Kubelet in Rust for running WASM”——使用 Rust 实现的 Kubelet,可以在 Kubernetes 中运行 WASM。
崔秀龙
2020/04/16
1.3K0
在顺序表第2个位置插入特殊符号
在我们平时学习的时候,我们常常学习了一个东西后而不去复习,就导致我们学习过的东西就在后面慢慢的忘记了。所以今天我要写一个平时学习过的一个知识点。
算法与编程之美
2022/04/08
2590
MySQL 事件调度器
事件调度器是定时触发执行的,在这个角度上也可以称作是"定时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行特定的语句/存储过程。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有SUPER权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
用户1278550
2018/08/09
1.6K0
在 Linux 上查找和删除损坏的符号链接
符号链接(symbolic link)在 Linux 系统上扮演了非常有用的角色。它们可以帮助你记住重要文件在系统上的位置,使你更容易访问这些文件,并让你不必为了更方便访问大文件而复制它们,从而节省了大量的空间。
用户9104802
2021/11/22
2.7K0
Mysql的事件调度器
事件调度器是Mysql5.1后新增的功能,可以将数据库按自定义的时间周期触发某种操作,可以理解为时间触发器,类似Linux系统下的任务调度器crontab.
Dream城堡
2019/02/26
8790
在PaaS上开发Web、移动应用(2)
在PaaS上开发Web、移动应用(2) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web、移动应用(2) PaaS优点与限制(3) 6. 巨型代码,是指持续不断地向一个应用程序添加
王小雷
2018/01/05
1.3K0
Touch 移动设备上的 手势识别 与 Js事件库
Touch.js 是移动设备上的手势识别与事件库, 由百度云Clouda团队维护,也是在百度内部广泛使用的开发工具。 Touch.js手势库专为移动设备设计。 Touch.js对于网页设计师来说,是一款不错的辅助工具,可以减少很多写框架控制器的时间。 网页合理使用Touch.js不但能增加网页的美观感,而且在节约时间,减少人力投入也有极大的帮助。
青梅煮码
2023/01/14
4.1K0
Touch 移动设备上的 手势识别 与 Js事件库
移动测试 关键要点
移动测试 关键要点 设备测试 设备测试通常是为了确保移动设备的质量。 测试包括移动设备的硬件和软件测试。 下面分享讨论不同类型的测试,这些测试通常可以在移动设备上进行的。 单元测试 单元测试是一个测试阶段,当开发人员测试移动设备开发的部分时。 它可能包含硬件测试、软件测试和机械测试。 工厂测试 工厂测试是对移动设备的一种严格检查方式。 它是自动进行的,以验证制造或装配没有任何缺陷。 通常包含以下测试: 移动应用程序测试 硬件测试 电池(充放电)测试 信号接收 网络测试 协议测试 手机游戏测试 手机软件兼容性
苦叶子
2018/04/09
6520
Innodb关键特性之插入缓冲
插入缓冲,也称之为insert buffer,它是innodb存储引擎的关键特性之一,我们经常会理解插入缓冲时缓冲池的一个部分,这样的理解是片面的,insert buffer的信息一部分在内存中,另外一部分像数据页一样,存在于物理页中。
AsiaYe
2019/11/06
2.1K0
在元素上写事件和addEventListener()的区别[通俗易懂]
语法: element.addEventListener( type , listener , useCapture ) – – 添加事件监听 – – type: 事件类型字符串,不使用“on”前缀 – – callback:事件处理程序(回调函数) – – useCapture:可选参数,是否使用事件捕获的方式处理事件。不传递时,默认为false,表示不使用事件捕获(使用事件冒泡),如果需要显示事件捕获,则显示传递true。
全栈程序员站长
2022/09/18
1.2K0
【移动端】touch事件及穿透事件
2007 苹果推出iphone,浏览器网页在iphone上显示时字体特别小,根本看不清楚
用户9914333
2022/12/14
2.1K0
【移动端】touch事件及穿透事件
移动端事件详解
关于移动端事件的一些笔记 移动端事件类型 touchstart事件 touchmove事件 touchend事件 移动端事件对象 touches 屏幕上有几个触点 targetTouches 绑定事件的元素上有几个触点 changedTouches 在屏幕上 改变(位置移动 离开 进入 )的触点的个数(如果手指离开屏幕 只有changedTouched有值 其他都没有) 获取触点坐标 clientX/Y获取的是, 触点相对于可视区的X/Y坐标(不包含滚动)(用的最多) pageX/Y获取的是
一个淡定的打工菜鸟
2018/09/06
9910
Latex学习笔记(十五)特殊符号的插入
image.png 这里记录一下常用的: α \alpha α $\alpha$ β \beta β $\beta$
zstar
2022/06/14
7400
Latex学习笔记(十五)特殊符号的插入
05移动端事件
一、移动端三大事件          1、手指按下     ontouchstart      2、手指触摸     ontouchmove           3、手指抬起     ontouchend //注意:在移动开发时,浏览器模拟器时好时坏,一般不用onX的方式绑定事件函数,要用事件绑定的方式(即第二种) div.ontouchstart = function(){}; div.addEventListener('touchstart', function(){}); 二、PC端事件在移动端(出现
用户1148399
2018/01/09
1.4K0
MySQL中的事件调度器
​ 事件调度器(Event Schedule)类似于Linux中的crontab(也就是定时任务),下面介绍事件调度器的基本使用方法
俺也想起舞
2021/10/26
1.1K0
win10 uwp 在笔迹开始书写拿到书写移动事件
在使用 InkCanvas 的过程,无法直接通过 Pointer 消息拿到书写移动,需要使用 StrokeInput 才能获取到
林德熙
2019/06/15
5800
JavaScript事件(上)
在JavaScript中,事件往往是页面的一些动作引起的,例如当用户按下鼠标或者提交表单,甚至在页面移动鼠标时,事件都会出现。
Qwe7
2022/04/10
4010
在Mac电脑上:更改移动硬盘的格式
ha_lydms
2023/08/09
7180
在Mac电脑上:更改移动硬盘的格式
点击加载更多

相似问题

Swing JTextArea插入符号事件

20

将JTextArea卷轴移动到插入符号

20

wxPython插入符号移动事件

41

在JTextArea中设置插入符号位置

11

在JTextArea中插入插入符号位置的文本

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文