在GWT中,当点击ESC键时关闭对话框。

26

我如何将类似addCloseHandler添加到对话框中,以便在按ESC键时关闭?

2个回答

38

您可以覆盖 DialogBox 类的 onPreviewNativeEvent() 方法:

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

1
唯一的问题是这是一个预览事件,因此可能需要由某些对话框子级进行处理。例如,选择(ListBox)使用esc等关闭。在这种情况下,我使用CellBasedWidgetImpl#isFocusable的副本来检查event.getNativeEvent().getTarget().cast()。 - Andrey Talnikov
2
非常感谢,搜索谷歌,排名靠前的结果,这对我有所帮助。 - Asraful
1
虽然我更喜欢使用 if (event.getTypeInt() == Event.ONKEYDOWN) 而不是 switch/break,但两者都可以工作。 - membersound

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

     return true;
 }

1
不幸的是,这个方法已经被废弃了,我不能使用它。 - user467871

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接