我正在寻找一个简单的解决方案来解决我的 GWTDialogBox
可以被拖出屏幕的问题。主机有 CSS 规则overflow:hidden
,因为我不希望出现任何滚动条。
显然,我需要以某种方式将监听器附加到拖动并防止将其带到外面的移动。我只能看到onMouseMove
, beginDragging
, 中endDragging
的方法DialogBox
。
我建议尝试 gwtquery-dnd。我一直在使用拖放插件,效果很好。它有一个选项来设置您正在寻找的 setContianment(Element elem)。其他一些功能是它具有捕捉功能,因此如果您希望将对话框停靠在某处,您可以捕捉到其他小部件。它还可以指定一个类似于 DialogBox 标题的句柄用于拖动。
http://code.google.com/p/gwtquery-plugins/wiki/DragAndDropPluginForGWTDeveloppers
您可以调查 com.google.gwt.user.client.ui.DialogBox 源代码并根据需要覆盖所有方法。有几种方法负责将其拖到那里。
不确定您是否可以通过其他方式解决此问题。否则,您需要开发自定义的可拖动弹出面板,我确信这不是一个好的解决方案。
“我们”通过以下方式解决了这个问题:
@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);
}
顺便说一句,它可以正常工作!;)