我正在尋找一個簡單的解決方案,可以將我的GWT DialogBox
拖出屏幕。主機具有CSS規則overflow:hidden
,因爲我不希望任何滾動條出現。如何防止將GWT DialogBox拖出屏幕?
很明顯,我需要以某種方式附加一個聽衆的拖動,並防止將它帶到外面的移動。我只能在DialogBox
中看到onMouseMove
,beginDragging
,endDragging
方法。
我正在尋找一個簡單的解決方案,可以將我的GWT DialogBox
拖出屏幕。主機具有CSS規則overflow:hidden
,因爲我不希望任何滾動條出現。如何防止將GWT DialogBox拖出屏幕?
很明顯,我需要以某種方式附加一個聽衆的拖動,並防止將它帶到外面的移動。我只能在DialogBox
中看到onMouseMove
,beginDragging
,endDragging
方法。
「我們」已經解決此問題以下列方式工作:
@Override
protected void endDragging(MouseUpEvent event)
{
int genericMargin = 60;
int leftMargin = -(this.getOffsetWidth() - genericMargin);
int lowerMargin = Window.getClientHeight() - genericMargin;
int rightMargin = Window.getClientWidth() - genericMargin;
int upperMargin = 0;
if (this.getAbsoluteLeft() > rightMargin)
{this.setPopupPosition(rightMargin, this.getPopupTop()); }
if (this.getAbsoluteLeft() < leftMargin)
{ this.setPopupPosition(leftMargin, this.getPopupTop()); }
if (this.getAbsoluteTop() > lowerMargin)
{ this.setPopupPosition(this.getPopupLeft(), lowerMargin);}
if (this.getAbsoluteTop() < upperMargin)
{ this.setPopupPosition(this.getPopupLeft(), upperMargin);}
super.endDragging(event);
}
BTW它正常工作,因爲它是! ;)
我會建議嘗試gwtquery-dnd。我一直在使用拖放插件,它的效果很好。它有一個選項setContianment(元素元素),這是你在找什麼。其他一些功能是它具有捕捉功能,因此如果您希望將對話框放置在某處,您可以捕捉到其他小部件。它還能夠指定類似於DialogBox標題的句柄來進行拖動。
http://code.google.com/p/gwtquery-plugins/wiki/DragAndDropPluginForGWTDeveloppers
你可以調查com.google.gwt.user.client.ui.DialogBox源代碼和覆蓋爲需要的所有方法。有幾個方法負責在那裏拖動。
不確定您是否可以通過其他方式解決此問題。否則,你需要開發自定義可拖動彈出面板,我相信不是一個好的解決方案。