Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取GWT对话框绝对位置-onLoad/onAttach/show没有帮助_Java_Gwt_Dialog_Popuppanel - Fatal编程技术网

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
),即使您检查
是否已附加()
。添加一些额外的检查,以确保当前通话中的位置正确。

它将保留,但即使答案是你的,你也必须接受:)是的,我会接受,但在发布问题(答案本身?)后的两天内,我只能接受它,所以我会在新的一年里尝试接受:)。真的吗?以前从没听说过。我在发布后立即接受我的,证明图片:和证明链接:谢谢!!新年快乐!:)(缔约方)