Как открыть JInternalFrame с центром в JDesktopPane?

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

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

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

3 ответов


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

Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = jInternalFrame.getSize();
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2,
    (desktopSize.height- jInternalFrameSize.height)/2);

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


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

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

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