Центрировать диалоговое окно на экране в приложении 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);
}
Другие вопросы по тегам