GWT:阻止对话框移出屏幕

时间:2013-10-24 11:43:03

标签: java gwt

所有对话框窗口都可以移出屏幕(水平或垂直,无关紧要)。当此窗口位于屏幕后方时,可以继续进一步拖动它,屏幕内容将移动。

这听起来很难理解,但最后它看起来像这样: enter image description here

css中的以下更改无济于事:

body {
    ...
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    overflow-y: hidden;
    overflow-x: hidden;
    ...
}


html {
    overflow-y: hidden;
    background-color: transparent;
}

移动对话框窗口时,不会出现垂直和水平滚动条。但如果有一个比主屏更大的对话框窗口,滚动条也不会出现 - 这是另一个问题。

如何防止对话窗口移出屏幕(快速示例,谷歌驱动器中的对话框窗口 - 它们只在屏幕的可见部分移动)?

1 个答案:

答案 0 :(得分:0)

我通过覆盖DialogBox的endDragging方法来寻找解决方案。这是:

@Override
protected void endDragging(MouseUpEvent event)
{
    //Move dialog window behind top border
    if(this.getAbsoluteTop() < 0) {
        this.setPopupPosition(this.getPopupLeft(), 0);
    }
    //Move dialog window behind bottom border
    if(this.getAbsoluteTop() > (Window.getClientHeight() - this.getOffsetHeight())) {
        this.setPopupPosition(this.getPopupLeft(), Window.getClientHeight() - this.getOffsetHeight());
    }

    //Move dialog window behind left border
    if(this.getAbsoluteLeft() < 0) {
        this.setPopupPosition(0, this.getPopupTop());
    }
    //Move dialog window behind right border
    if(this.getAbsoluteLeft() > (Window.getClientWidth() - this.getOffsetWidth())) {
        this.setPopupPosition(Window.getClientWidth() - this.getOffsetWidth(), this.getPopupTop());
    }
    super.endDragging(event);
}

当对话框移出屏幕时,鼠标释放后会出现在屏幕的可见部分。可以改进它并覆盖continueDragging以防止窗口完全离开屏幕。