如何设置SWT Dialog的位置?

How to set the location of SWT Dialog?

我有一个按钮。如果单击,将打开一个对话框。对话框总是出现在屏幕的中央,即使我想将它放在某个位置。

这是为什么?如何设置对话框的位置?

@Override
public void widgetSelected(SelectionEvent e) {
        Dialog dialog = new MyDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "MyDialog");
        dialog.open();
        Point pt = ImageDisplayHelper.getDisplay().getCursorLocation();
        System.out.println("location pt: "+pt); // pt is a valid location something like Point {1368, 220}
        dialog.getShell().setLocation(pt); // no effect whatsoever
        dialog.getShell().setLocation(10, 10); // no effect whatsoever
}

对话框open方法显示对话框并等待它关闭。所以在调用 open 之后设置位置为时已晚。

改为调用dialog的create方法,然后设置位置最后调用open:

dialog.create();

... set location

dialog.open();

另一种方法是覆盖

protected Point getInitialLocation(Point initialSize)

对话框中的方法和return你想要的位置。