Как открыть JInternalFrame с центром в JDesktopPane? - PullRequest
6 голосов
/ 20 сентября 2011

Я добавляю кучу JInternalFrame s в JDesktopPane, поскольку пользователь выбирает, чтобы открывать различные функции через меню.Но я бы хотел, чтобы внутренние рамки открывались по центру на панели рабочего стола, а не в левом верхнем углу, где они выглядят по умолчанию.

Как указать, что JInternalFrames открывать по центру, или переместить их в центрпосле открытия?

jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered!

Ответы [ 4 ]

11 голосов
/ 21 сентября 2011

Для справки, вот решение, которое я использовал, основываясь на совете клана:

Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = jInternalFrame.getSize();
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2,
    (desktopSize.height- jInternalFrameSize.height)/2);
4 голосов
/ 20 сентября 2011

Определите верхний левый угол нового местоположения (на основе размера JDesktopPane и JInternalFrame), а затем вызовите JInternalFrame.setLocation.

0 голосов
/ 23 декабря 2018

Если вы используете Netbeans (что рекомендуется для настольных приложений), вам просто нужно:

  1. Выберите форму, щелкните правой кнопкой мыши, а затем выберите свойства;
  2. Перейдите на вкладку кода;
  3. Измените «Политика размера формы» с «Сформировать пакет ()» на «Сгенерировать код изменения размера»;
  4. Положение формы (опция выше размера формы)политика) будет доступно.

Теперь вы можете установить желаемое положение для позиции :)

0 голосов
/ 20 сентября 2011

Я бы предложил метод Window.setLocationRelativeTo (Component), который будет центрировать окно относительно указанного компонента.Вместо того, чтобы передавать JDesktopPane, вы можете получить родительский фрейм для компонента, так как в противном случае ваш JInternalFrame будет центрирован в зависимости от того, какой компонент вы передаете.

Вот пример кода:

private void showDialog(Dialog dialogToCenter, Component button) {
    Frame frame = JOptionPane.getFrameForComponent(button);
    dialogToCenter.setLocationRelativeTo(frame);
    dialogToCenter.setVisible(true);
}
...