在GWT中单击ESC(ESC)时关闭对话框

在GWT中单击ESC(ESC)时关闭对话框,gwt,keylistener,dialog,Gwt,Keylistener,Dialog,如何将addCloseHandler之类的内容添加到对话框中,以便在单击ESC键时关闭?您可以覆盖对话框的onPreviewNativeEvent()方法类: @Override public boolean onKeyDownPreview(char key, int modifiers) { switch (key) { case KeyCodes.KEY_ESCAPE: hide(); break; } r

如何将addCloseHandler之类的内容添加到对话框中,以便在单击ESC键时关闭?

您可以覆盖
对话框的
onPreviewNativeEvent()
方法
类:

@Override
 public boolean onKeyDownPreview(char key, int modifiers) {
     switch (key) {
       case KeyCodes.KEY_ESCAPE:
         hide();
         break;
     }

     return true;
 }
public void onModuleLoad() {
    ExtendedDialogBox dialog = new ExtendedDialogBox();

    dialog.add(new Label("some content"));

    dialog.show();
}

private class ExtendedDialogBox extends DialogBox {

    @Override
    protected void onPreviewNativeEvent(NativePreviewEvent event) {
        super.onPreviewNativeEvent(event);
        switch (event.getTypeInt()) {
            case Event.ONKEYDOWN:
                if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
                    hide();
                }
                break;
        }
    }
}

不幸的是,这是一个不推荐使用的方法,我不能使用它。唯一的问题是,这是一个预览事件,所以它可以由某个对话框子级处理。例如,选择(列表框)是用esc关闭的,等等。对于这种情况,我使用CellBasedWidgetImpl的dup来检查event.getNativeEvent().getTarget().cast()。非常感谢,在google中搜索,结果为上,这对我来说很有用,因为我更喜欢
if(event.getTypeInt()==event.ONKEYDOWN)
而不是开关/断路器,但两者都可以工作。