Центрировать диалоговое окно на экране в приложении eclipse e4 RCP сразу после активации Part
Я открываю диалоговое окно, когда активирована левая часть в моем приложении Eclipse RCP. В методе Part @PostConstruct я регистрирую IPartListner в EPartService. Следующий код показывает, что:
partService.addPartListener(new IPartListener() {
@Override
public void partActivated(MPart part) {
if(part.getElementId().equals("left_part_id")) {
SignInDialog dialog = new SignInDialog(shell, display, eventBroker);
dialog.open();
}
}
});
Где в SignInDialog, который расширяет JFace Dialog, я делаю это:
@Override
protected void configureShell(Shell newShell) {
Monitor monitor = display.getPrimaryMonitor();
Rectangle monitorRect = monitor.getBounds();
int x = monitorRect.x + (monitorRect.width - 600) / 2;
int y = monitorRect.y + (monitorRect.height - 360) / 2;
newShell.setLocation(x, y);
newShell.setText("Sign In");
super.configureShell(newShell);
}
@Override
protected Point getInitialSize() {
return new Point(600, 360);
}
Обратите внимание, что левая часть всегда видна и связана через Application.e4xmi. Моя проблема в том, что как только деталь активируется, в мониторе отображается нижний правый угол. Если тот же диалог открывается нажатием кнопки, он отображается правильно в центре. Любая помощь будет оценена, спасибо заранее!
1 ответ
Решение
Использовать getInitialLocation
метод, чтобы установить местоположение диалога. Размер установлен в configureShell
переопределяется по умолчанию getInitialLocation
@Override
protected Point getInitialLocation(final Point initialSize)
{
Display display = getShell().getDisplay();
Monitor monitor = display.getPrimaryMonitor();
Rectangle monitorRect = monitor.getBounds();
int x = monitorRect.x + (monitorRect.width - 600) / 2;
int y = monitorRect.y + (monitorRect.height - 360) / 2;
return new Point(x, y);
}