如何将gwt中的弹出窗口定位到鼠标位置。 我有一个巨大的flextable和flextable包含按钮。如果按下某个按钮,则弹出窗口会显示一些数据,但弹出窗口始终显示在页面顶部。 如果用户位于表格的底部,那么弹出窗口将不在视图中,他们无法看到它?
如何获得鼠标位置的x和y坐标?
答案 0 :(得分:9)
PopupPanel 类的 showRelativeTo 方法在我的用例中运行良好。
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);
}
});
}
});
}
}
答案 1 :(得分:3)
要显示弹出窗口,请使用center()
方法而不是show()
方法。这应创建一个弹出窗口并将其显示在浏览器视口的中心。
答案 2 :(得分:1)
要获得鼠标位置,您可以使用已传递给事件处理函数的事件中的getClientX / Y()或getScreenX / Y()。
答案 3 :(得分:0)
在主面板中添加此项并将全局变量对象中的坐标保存为静态(?)
main_verticalPanel.addDomHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) {
GlobalVars.mouseX = event.getX();
GlobalVars.mouseY = event.getY();
}
}, MouseMoveEvent.getType());
然后从代码中的其他位置获取坐标。