GWT PopupPanel不正确的弹出位置

问题描述:

我使用GWT PopupPanel在用户单击按钮时在按钮上方显示一个弹出窗口。GWT PopupPanel不正确的弹出位置

我设置弹出窗口的位置和显示,像这样的:

panel.setPopupPosition(leftPos, topPos); 
panel.show(); 

然而,当我检查弹出窗口的顶部值就说明后,我看到它的位置比我赋予它略低。

问题可能是setPopupPosition改变了在传递的值:

// Account for the difference between absolute position and the 
// body's positioning context. 
left -= Document.get().getBodyOffsetLeft(); 
top -= Document.get().getBodyOffsetTop(); 

我怎样才能确保GWT PopupPanel的位置正好是我给它的价值? setPopupPosition()似乎确实是设置位置的唯一方式,但它对我通过的位置进行了一些操作(对我的用例来说不必要)。

+0

您可以使用弹出的DOM元素的样式直接访问 - 例如PopupPanel.getElement()。getStyle()。setPropertyPx(“top”,topPos); –

+0

啊,看到我试过了,它不起作用(弹出窗口出现在0,0),但关键是在调用show()后设置这些属性。这适用于我,因为在调用show()后设置位置时没有看到弹出的“跳转”,但我不知道是否有任何方法在调用show()之前设置位置而不使用'setPopupPosition()'? 随意回答你的建议(一定要在调用show()后提及,我会接受! – OMGitzMidgar

+0

我已经添加了答案。 –

您可以使用直接访问弹出式DOM元素来调整PopupPanel位置。但是它应该在调用show()之后并在弹出可见之前完成。否则,您可能会看到一些“跳跃”效果。 例子:

PopupPanel popupPanel = new PopupPanel(); 
... 
// this callback will be called after PopupPanel.show(), but before it is shown 
popupPanel.setPopupPositionAndShow(new PositionCallback() { 
    @Override 
    public void setPosition(int offsetWidth, int offsetHeight) { 
     Style style = popupPanel.getElement().getStyle(); 
     style.setLeft(100, Unit.PX); 
     style.setTop(100, Unit.PX); 
    } 
});