2011-06-22 69 views
4

如何在gwt中将弹出窗口放置在鼠标位置。 我有一个巨大的flextable和flextable包含按钮。如果按下某个按钮,弹出窗口会显示一些数据,但弹出窗口总是显示在页面的顶部。 如果用户位于表格的底部,那么弹出窗口将不在视图中,并且他们无法看到它?GWT - 弹出位置

如何获得鼠标位置的x和y坐标?

回答

2

要显示弹出窗口,请使用center()方法而不是show()方法。这应该创建一个弹出窗口并将其显示在浏览器视口的中心。

+0

您的解决方案工作..谢谢:) – sap

+0

我很高兴我可以帮助:-)。 – helpermethod

1

要获得鼠标位置,您可以使用getClientX/Y()或getScreenX/Y()从传递给事件处理函数的事件中获取鼠标位置。

8

showRelativeTo方法PopupPanel类在我的用例中运行良好。

import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.ui.Image; 
import com.google.gwt.user.client.ui.PopupPanel.PositionCallback; 

public class CommentPanelPopupImage extends Image { 
    public CommentPanelPopupImage(final int tableId, final String referenceId, final String title) { 
     super("external-link-ltr-icon.png"); 
     setTitle("Click to see comments"); 
     final CommentPanelPopupImage commentPanelPopupImage = this; 
     addClickHandler(new ClickHandler() { 

      public void onClick(final ClickEvent event) { 
       final CommentPopupPanel popup = new CommentPopupPanel(tableId, referenceId, title); 
       popup.setPopupPositionAndShow(new PositionCallback() { 

        public void setPosition(int offsetWidth, int offsetHeight) { 
         popup.showRelativeTo(commentPanelPopupImage); 
        } 
       }); 
      } 
     }); 
    } 
} 
+0

popup.showRelativeTo()保存了我的一天! – EMM

0

在您主面板中添加这一点,并保存在一个全局变量的坐标对象为静态的(?)

main_verticalPanel.addDomHandler(new MouseMoveHandler() { 

      @Override 
      public void onMouseMove(MouseMoveEvent event) { 
       GlobalVars.mouseX = event.getX(); 
       GlobalVars.mouseY = event.getY(); 
      } 

     }, MouseMoveEvent.getType()); 

然后在你的代码的其他地方得到的坐标。