7

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

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

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

5 回答 5

15

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

Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = jInternalFrame.getSize();
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2,
    (desktopSize.height- jInternalFrameSize.height)/2);
于 2011-09-21T15:56:09.620 回答
4

计算出新位置的左上角(基于JDesktopPaneand的大小JInternalFrame),然后调用JInternalFrame.setLocation.

于 2011-09-20T17:11:42.560 回答
1

如果您使用的是 Netbeans(推荐用于桌面应用程序),您只需要:

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

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

于 2018-12-23T20:45:20.993 回答
0

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

这是一个代码示例:

private void showDialog(Dialog dialogToCenter, Component button) {
    Frame frame = JOptionPane.getFrameForComponent(button);
    dialogToCenter.setLocationRelativeTo(frame);
    dialogToCenter.setVisible(true);
}
于 2011-09-20T17:50:07.703 回答
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);
于 2020-02-08T23:48:30.983 回答