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

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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 15:28:10

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

代码语言:javascript
代码运行次数:0
运行
复制
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 09:16:44

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

代码语言:javascript
代码运行次数:0
运行
复制
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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档