Я создал мастера, я хочу, чтобы он всегда располагался в центре. Может ли кто-нибудь мне помочь? - PullRequest
4 голосов
/ 24 января 2012
private Point getFirstMonitorSize() { // Here Point is org.eclipse.swt.graphics.Point
    Display display = Display.getDefault();
    if (display != null) {
        Monitor[] monitors = display.getMonitors();
        if (monitors.length == 1) {
            Rectangle clientArea = monitors[0].getClientArea();
            return new Point(clientArea.width / 2, clientArea.height / 2);
        }
    }
    return null;
}

Я обнаружил это для позиционирования, но я не знаю, как использовать в диалоговом окне мастера?

Ответы [ 2 ]

3 голосов
/ 07 мая 2018

Для Eclipse E4 вы можете добавить этот метод в свой класс E4LifeCycle.Это сделает ваш прикладной центр основным монитором.

Это сделает расположение оболочки вашего приложения в центре экрана, если вы откроете WizardDialog, в котором вы установили правильное значение parent shell, тогда все станет на свои места

@Inject
@Optional
public void receiveActiveShell(@Named(IServiceConstants.ACTIVE_SHELL) final Shell shell) {
    try {
        if (shell != null) {
            final Display display = shell.getDisplay();
            final Monitor primary = display.getPrimaryMonitor();
            final Rectangle displayBounds = primary.getBounds();
            shell.setSize(displayBounds.width - 100, displayBounds.height - 100);
            final Point size = shell.getSize();
            Point defaultLocation = new Point((int) (displayBounds.width - size.x) / 2, (int) (displayBounds.height - size.y) / 2);
            shell.setLocation(this.defaultLocation);
        }
    } catch (Exception e) {
        LOGGER.error("Execption ocuured in Active Shell", e); //$NON-NLS-1$
    }
}
1 голос
/ 24 января 2012

Вы можете расположить диалоговое окно мастера, позвонив по номеру wizardDialog.getShell().setLocation(..).

...