如何打开JDesktopPane中心的JInternalFrame?

时间:2011-09-20 17:06:39

标签: java swing center jinternalframe jdesktoppane

我在JInternalFrame中添加了一堆JDesktopPane,因为用户选择通过菜单打开各种功能。但我希望内部框架在桌面窗格中心打开,而不是左上角,它们似乎是默认的。

如何指定JInternalFrames打开居中,或者在打开后将它们移动到中心?

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

5 个答案:

答案 0 :(得分:11)

作为参考,这里是我使用的解决方案,基于dogbane的建议:

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

答案 1 :(得分:4)

计算新位置的左上角(根据JDesktopPaneJInternalFrame的大小),然后拨打JInternalFrame.setLocation

答案 2 :(得分:0)

我建议使用Window.setLocationRelativeTo(Component)方法,该方法将窗口相对于指定的组件居中。您可能希望获取组件的父框架,而不是传入JDesktopPane,否则,您的JInternalFrame将根据您传入的任何组件进行居中。

以下是代码示例:

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

答案 3 :(得分:0)

如果您正在使用Netbeans(建议用于桌面应用程序),则只需:

  1. 选择表单,右键单击,然后单击属性;
  2. 转到“代码”标签;
  3. 将“表单大小策略”从“生成Pack()”更改为“生成调整大小” 代码”;
  4. 表格位置(表格尺寸政策上方的选项)将可用。

现在,您可以根据需要设置for位置:)

答案 4 :(得分:0)

添加此空白

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);