在GXT中, MessageBox 方法是异步的,这意味着应用程序在显示消息框时不会“锁定”。

我用的是 KeyListener 处理表单中的回车键(以提高可用性,即允许通过回车键提交表单),然后在应用程序处理用户的凭据时禁用表单字段。如果它们不正确,我会显示一个 MessageBox.alert() 然后重新启用表单字段。然而,自从 alert() 立即返回,表单字段立即再次可用,允许用户输入数据而无需关闭警报。

解决方案是使用回调 alert();但是,按 Enter 按键不仅会导致表单提交,还会导致警报立即消失(就好像表单和消息框都在处理 Enter 键一样)。如何保持警报框打开,直到用户再次按 Enter 键或单击“确定”按钮?

有帮助吗?

解决方案

关键是 DeferredCommand 由...提供 总吨位:

此类允许您在所有当前挂起的事件处理程序完成后执行代码,使用 addCommand(Command) 或者 addCommand(IncrementalCommand) 方法。当您需要在当前堆栈上下文之外执行代码时,这非常有用。

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top