Центр JDialog плагин в IntelliJ Идея - PullRequest
0 голосов
/ 01 июня 2018

Я сейчас программирую плагин для IntelliJ, но потерял основы того, как центрировать новый JDialog перед окном IntelliJ.Это то, что я создаю и открываю новый JDialog, и он должен первоначально центрироваться в IDE, даже если я меняю монитор.Я бегу "setLocationRelativeTo (null);"и он все время открывается на моем основном экране, а не в IDE.Кто-нибудь понимал, что мне не хватает?

Редактировать

Я пытался определить положение родителей и использовать координату, чтобы указать, где должен быть JDialog.Но он всегда отображается в левом верхнем углу моего основного экрана, а не там, где у меня есть IDE.

    Point parentPoint = getParent().getLocation();
    Dimension parentDimension = getParent().getSize();
    Dimension dialogDimension = getSize();
    int x = (int) (parentPoint.getX() + (parentDimension.getWidth() - dialogDimension.getWidth()) / 2);
    int y = (int) (parentPoint.getY() + (parentDimension.getHeight() - dialogDimension.getHeight()) / 2);
    setLocation(x, y);

1 Ответ

0 голосов
/ 01 июня 2018

Решено!

Проблема заключалась в том, что я никогда не назначал родительское окно для JDialog.Так как я создал диалог через AnAction Impl, я мог получить проект из AnActionEvent.Я использовал эту переменную проекта для создания этого кода в моей реализации JDialog.

private Window getParentWindow(Project project) {
    WindowManagerEx windowManager = (WindowManagerEx) WindowManager.getInstance();

    Window window = windowManager.suggestParentWindow(project);
    if (window == null) {
        Window focusedWindow = windowManager.getMostRecentFocusedWindow();
        if (focusedWindow instanceof IdeFrameImpl) {
            window = focusedWindow;
        }
    }
    return window;
}

Тогда просто вызовите этот метод для

setLocationRelativeTo(getParentWindow(project));
...