0

我正在寻找一个简单的解决方案来解决我的 GWTDialogBox可以被拖出屏幕的问题。主机有 CSS 规则overflow:hidden,因为我不希望出现任何滚动条。

显然,我需要以某种方式将监听器附加到拖动并防止将其带到外面的移动。我只能看到onMouseMove, beginDragging, 中endDragging的方法DialogBox

4

3 回答 3

1

我建议尝试 gwtquery-dnd。我一直在使用拖放插件,效果很好。它有一个选项来设置您正在寻找的 setContianment(Element elem)。其他一些功能是它具有捕捉功能,因此如果您希望将对话框停靠在某处,您可以捕捉到其他小部件。它还可以指定一个类似于 DialogBox 标题的句柄用于拖动。

http://code.google.com/p/gwtquery-plugins/wiki/DragAndDropPluginForGWTDeveloppers

于 2012-08-31T14:10:56.383 回答
1

您可以调查 com.google.gwt.user.client.ui.DialogBox 源代码并根据需要覆盖所有方法。有几种方法负责将其拖到那里。

不确定您是否可以通过其他方式解决此问题。否则,您需要开发自定义的可拖动弹出面板,我确信这不是一个好的解决方案。

于 2012-08-31T14:58:14.093 回答
1

“我们”通过以下方式解决了这个问题:

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

顺便说一句,它可以正常工作!;)

于 2012-10-17T09:00:33.133 回答