GWT专注于对话框中的按钮

Toj*_*oji 0 gwt

我正在努力将重点放在GWT对话框上.我正在尝试组建一个非常友好的键盘界面,所以当我的对话框出现时(一个简单的是/否/取消事件)我需要让键盘焦点自动切换到"是"按钮.然而,尽管我付出了最大的努力,但似乎无法将重点放在需要编程的地方.我现在的代码如下所示:

public abstract class ConfirmDialog extends DialogBox {
    final Button yesBtn, noBtn, cancelBtn;

    public ConfirmDialog(String title, String prompt) {
        super(false);

        setTitle(title);
        setText(title);
        setGlassEnabled(true); // For great modal-ness!

        DockLayoutPanel buttonPanel = new DockLayoutPanel(Unit.PX);
        buttonPanel.setHeight("25px");
        buttonPanel.addEast(cancelBtn, 75);
        buttonPanel.addEast(noBtn, 60);
        buttonPanel.addEast(yesBtn, 60);

        FlowPanel dialogPanel = new FlowPanel();
        dialogPanel.add(new HTML(prompt));
        dialogPanel.add(buttonPanel);

        setWidget(dialogPanel);
    }

    @Override
    public void show() {
        super.show();
        center();
        yesBtn.setFocus(true); // Why does this hate me???
    }
}
Run Code Online (Sandbox Code Playgroud)

省略:许多按钮点击事件处理不会影响初始显示.

无论如何,正如您从代码中看到的那样,目的是一旦显示对话框,"是"按钮就会获得焦点.我已经尝试了它,如代码示例中所示,我已将焦点放在DeferredCommand中,我已尝试挂钩其他事件......但最好的焦点有点随机.

我想这可能只是一个时间问题(也许我在将它添加到DOM之前尝试将重点放在按钮上?)但是如果是这样的话我不知道应该注意什么时候让我知道我可以有效地给按钮重点.任何提示?

谢谢!

zor*_*o2b 5

如果你想获得焦点而不是捕获关键事件,你需要像这样推迟setFocus:

@Override
public void show() {
    super.show();

    Scheduler.get().scheduleDeferred(new Command() {
        public void execute() {
            yesBtn.setFocus(true);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)