2013-10-24 4 views
0

Все диалоговые окна можно перемещать с экрана (по горизонтали или по вертикали, не имеет значения). Когда это окно за экраном, можно продолжить его дальнейшее перемещение, и содержимое экрана будет перемещаться.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; 
} 

Вертикальные и горизонтальные полосы прокрутки дону Появится диалоговое окно. Но если есть диалоговое окно с большим размером, чем главный экран, полосы прокрутки также не будут отображаться - и это еще одна проблема.

Как предотвратить перемещение диалогового окна с экрана (быстрый пример, диалоговые окна на Google Диске - они движутся только в видимой части экрана)?

+0

Это то, что вам нужно? http://stackoverflow.com/questions/12211331/how-to-prevent-gwt-dialogbox-from-being-dragged-out-of-the-screen –

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ, это не сработало для меня. Я сделал свою собственную реализацию «endDragging» (см. Мой ответ). – Dragon

ответ

0

Я пришел к решению, которое я искал, переопределяя endDragging метод DialogBox. Вот он:

@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, чтобы предотвратить полное отключение окна от экрана.

Смежные вопросы