代码之家  ›  专栏  ›  技术社区  ›  Toji

GWT焦点在对话框中的按钮上

gwt
  •  0
  • Toji  · 技术社区  · 14 年前

    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???
        }
    }
    

    省略:大量的按钮点击事件处理不影响初始显示。

    我想这可能只是一个时间问题(也许我正试图在按钮被添加到DOM之前关注它?)但如果是这样的话,我就不知所措了,我应该注意什么,让我知道什么时候我可以有效地给按钮焦点。有什么提示吗?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  3
  •   cxd213    13 年前

    您需要重写onPreviewNativeEvent方法,正如我在下面的popupanel/对话框中所做的那样:

    protected void onPreviewNativeEvent(Event.NativePreviewEvent event) {
        if(event.getTypeInt() == Event.ONKEYDOWN) {
            if(event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
                submitButton.click();
            }
        }
        super.onPreviewNativeEvent(event);
    }
    

    这将允许您在显示popupanel时捕获关键事件。

        2
  •  5
  •   zorro2b    12 年前

    如果要获得焦点而不是捕获关键事件,则需要如下延迟setFocus:

    @Override
    public void show() {
        super.show();
    
        Scheduler.get().scheduleDeferred(new Command() {
            public void execute() {
                yesBtn.setFocus(true);
            }
        });
    }
    
        3
  •  0
  •   barrowc    14 年前

    你可以试着用 setTabIndex 相反。

    cancelBtn.setTabIndex(2);
    noBtn.setTabIndex(1);
    yesBtn.setTabIndex(0);