当用户选择通过菜单打开各种功能时,我将一堆JInternalFrame
s 添加到 a中。JDesktopPane
但我希望内部框架在桌面窗格的中心打开,而不是左上角,它们似乎是默认的。
如何指定 JInternalFrames 打开居中,或打开后将它们移到中心?
jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered!
当用户选择通过菜单打开各种功能时,我将一堆JInternalFrame
s 添加到 a中。JDesktopPane
但我希望内部框架在桌面窗格的中心打开,而不是左上角,它们似乎是默认的。
如何指定 JInternalFrames 打开居中,或打开后将它们移到中心?
jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered!
作为参考,这是我使用的解决方案,基于 dogbane 的建议:
Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = jInternalFrame.getSize();
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2,
(desktopSize.height- jInternalFrameSize.height)/2);
计算出新位置的左上角(基于JDesktopPane
and的大小JInternalFrame
),然后调用JInternalFrame.setLocation
.
如果您使用的是 Netbeans(推荐用于桌面应用程序),您只需要:
现在您可以根据需要设置 for 位置:)
我建议使用 Window.setLocationRelativeTo(Component) 方法,该方法将使窗口相对于指定组件居中。您可能希望获取组件的父框架,而不是传入 JDesktopPane,否则,您的 JInternalFrame 将根据您传入的任何组件居中。
这是一个代码示例:
private void showDialog(Dialog dialogToCenter, Component button) {
Frame frame = JOptionPane.getFrameForComponent(button);
dialogToCenter.setLocationRelativeTo(frame);
dialogToCenter.setVisible(true);
}
添加这个空白
public void addCentered(Component jif) {
desktopPane.add(jif);
jif.setLocation((desktopPane.getWidth()-jif.getWidth())/2, (desktopPane.getHeight()-jif.getHeight())/2);
jif.setVisible(true);
}
并在添加 jInternalFrame 调用时:
addCentered(jifName);