Java 获取GWT对话框绝对位置-onLoad/onAttach/show没有帮助
我被困在获取Java 获取GWT对话框绝对位置-onLoad/onAttach/show没有帮助,java,gwt,dialog,popuppanel,Java,Gwt,Dialog,Popuppanel,我被困在获取对话框的绝对位置。我知道设置它是PopupPanel(DialogBox的父对象)的常见问题(也是奇怪的解决方法),但是如果我想得到它,当该框连接到DOM时的确切时间是什么?覆盖show或onAttach或show都没有帮助: class MyDialog extends DialogBox { public MyDialog(. . .) { ComplexPanel vert = new VerticalPanel(); vert.add
对话框
的绝对位置。我知道设置它是PopupPanel
(DialogBox的父对象)的常见问题(也是奇怪的解决方法),但是如果我想得到它,当该框连接到DOM时的确切时间是什么?覆盖show
或onAttach
或show
都没有帮助:
class MyDialog extends DialogBox {
public MyDialog(. . .) {
ComplexPanel vert = new VerticalPanel();
vert.add("Test");
vert.add(new Button("Close", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
MyDialog.this.hide();
}
}));
setWidget(vert);
this.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
if (event.isAttached()) Log.debug("attach:"+MyDialog.this.getAbsoluteLeft() +";"+
MyDialog.this.getAbsoluteTop());
}
});
}
@Override
protected void onLoad() {
super.onLoad();
Log.debug("load:"+this.getAbsoluteLeft() +";"+this.getAbsoluteTop());
}
@Override
public void show() {
super.show();
Log.debug("show:"+this.getAbsoluteLeft() +";"+this.getAbsoluteTop());
}
}
所以当我调用newmydialog().show()时代码>,所有这些行都做日志0;0,但该对话框位于页面中心。但我想要的是offsetParent
位置链的总和。(如果使用JSNI检查这一点,即使在JavaScript中,它们在这些时刻也是0)
同样,setPopupPositionAndShow
允许设置位置,但无法获得它:(最后,我要做的是:
@Override
public void setPopupPosition(int left, int top) {
super.setPopupPosition(left, top);
if (this.isAttached()) Log.debug("setPos:"+this.getAbsoluteLeft() +";"+this.getAbsoluteTop());
}
它得到了正确的位置,我希望这是正确的方法,并且每次都会调用setpoupposition
。您甚至会在使用setpoupposition和show
时手动调用它
我认为,明智的做法是,让这个问题“为子孙后代”停留在这个水平
Upd.如果您计划调用中心(…)
或类似的对话框方法,请注意setpoupposition
将被调用两次或更多次(可能是第一次调用0,0
),即使您检查是否已附加()
。添加一些额外的检查,以确保当前通话中的位置正确。它将保留,但即使答案是你的,你也必须接受:)是的,我会接受,但在发布问题(答案本身?)后的两天内,我只能接受它,所以我会在新的一年里尝试接受:)。真的吗?以前从没听说过。我在发布后立即接受我的,证明图片:和证明链接:谢谢!!新年快乐!:)(缔约方)