Gwt GXT在没有焦点丢失的情况下获取TextArea的值

Gwt GXT在没有焦点丢失的情况下获取TextArea的值,gwt,gxt,Gwt,Gxt,我有一个GXT 3文本区域,可以在其中捕获复制粘贴事件。在这个事件中,我想获取文本区域内的文本 问题:文本区域仍有焦点,因此值不会更新。因此,getValue()返回一个空字符串 我试图调用getValue()getCurrentValue()flush()validate() 我还尝试扩展TextArea以访问blur()方法,并在获取值之前调用它:这没有什么区别 有解决办法吗?(即使是使用GWT组件的解决方案也会受到欢迎)。如果看不到您的代码,很难确定。但您可以猜测,您正在侦听该事件,并立即

我有一个GXT 3文本区域,可以在其中捕获复制粘贴事件。在这个事件中,我想获取文本区域内的文本

问题:文本区域仍有焦点,因此值不会更新。因此,
getValue()
返回一个空字符串

我试图调用
getValue()
getCurrentValue()
flush()
validate()

我还尝试扩展
TextArea
以访问
blur()
方法,并在获取值之前调用它:这没有什么区别


有解决办法吗?(即使是使用GWT组件的解决方案也会受到欢迎)。

如果看不到您的代码,很难确定。但您可以猜测,您正在侦听该事件,并立即调用
getCurrentValue()
(本例中的正确调用)

这是错误的-事件处理程序可能会调用
preventDefault()
,以取消大多数可能发生的事件的默认行为。事件处理程序返回后,浏览器才真正执行操作(粘贴或绘制按下的键)。解决这个问题的办法是在尝试阅读之前等待片刻,直到操作完成之后。实现这一点的最简单方法是在事件发生后安排延迟命令,然后读取字段的值

//in the event handler of your choice...
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        String pastedValue = field.getCurrentValue();
        //do something with the value now
    }
});

在获取您可以调用的值之前

yourTextField.finishEditing()

之后,方法
getValue()
应返回字段的值。如果您希望在获得值后保持此字段的焦点,则可以随时调用

yourTexField.focus()


您至少需要做额外的工作才能保持光标的位置。还要记住,
getCurrentValue()
将返回正确的值,即使仍然模糊。