如何防止GWT DialogBox被拖出屏幕?

时间:2012-08-31 08:12:33

标签: java gwt

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

显然,我需要以某种方式附加一个监听器来拖动并阻止将它带到外面的移动。我只能在onMouseMove中看到beginDraggingendDraggingDialogBox方法。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以调查com.google.gwt.user.client.ui.DialogBox源代码并覆盖您需要的所有方法。拖动那里有几种方法。

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

答案 2 :(得分: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);
}

BTW它正确地工作原样! ;)