将焦点设置为gwtbootstrap3模式中的输入

将焦点设置为gwtbootstrap3模式中的输入,gwt,twitter-bootstrap-3,gwtbootstrap3,Gwt,Twitter Bootstrap 3,Gwtbootstrap3,在对话框显示之前,我想在对话框(org.gwtbootstrap3.client.ui.Input)中将焦点设置为某个字段(org.gwtbootstrap3.client.ui.Modal)。如果您有一个带有单个字段的对话框,比如上传文本或添加提要对话框,那么用例似乎非常常见。但是,我不知道如何将焦点设置到这个特定组件 Input组件有一个setFocus(true)方法。我假设在显示对话框之前设置焦点不起作用,但事实并非如此。因此,合乎逻辑的解决方案是将方法调用放在ScheduledComm

在对话框显示之前,我想在对话框(
org.gwtbootstrap3.client.ui.Input
)中将焦点设置为某个字段(
org.gwtbootstrap3.client.ui.Modal
)。如果您有一个带有单个字段的对话框,比如上传文本或添加提要对话框,那么用例似乎非常常见。但是,我不知道如何将焦点设置到这个特定组件

Input
组件有一个
setFocus(true)
方法。我假设在显示对话框之前设置焦点不起作用,但事实并非如此。因此,合乎逻辑的解决方案是将方法调用放在
ScheduledCommand
中。像这样:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        textField.setFocus(true);
    }

});
modal.addShowHandler(new ModalShowHandler() {

    @Override
    public void onShow(ModalShowEvent evt) {
        textField.setFocus(true);
    }

});
这通常适用于GWT标准组件,但在这种情况下似乎没有帮助。我找到了一种通过
ModalShowHandler
显示对话框后获得通知的方法。像这样:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        textField.setFocus(true);
    }

});
modal.addShowHandler(new ModalShowHandler() {

    @Override
    public void onShow(ModalShowEvent evt) {
        textField.setFocus(true);
    }

});

我甚至尝试将两者结合起来,在句柄中添加一个延迟调用。不走运。有什么想法吗?

你应该听
模块shownevent
(注意:
显示的是
,而不是
显示的是

ModalShowEvent
在请求(例如,以编程方式)显示模式时被激发

modalshownent
在实际显示模式时被激发

这种有点混乱的命名基于本机事件:
show.bs.modal
show.bs.modal


ModalShownEvent
与通常的
Scheduler#schedulederferred
相结合应该可以达到这个目的。

工作起来很有魅力。即使没有延迟通话。