【发布时间】:2018-02-16 22:56:17
【问题描述】:
我正在尝试在 JDesktopPane 内创建一个 JInternalPane,但它没有正确居中。
JDesktopPane 的创建方式如下(我使用的是 Netbeans 拖放):
JDesktopPane desktopPane;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0, 0, screenSize.width / 2, screenSize.height / 2);
desktopPane = new JDesktopPane();
setContentPane(desktopPane);
然后我创建 JInternalFrame:
LoginUI login = new LoginUI();
Dimension desktopSize = desktopPane.getSize();
Dimension loginSize = login.getSize();
int width = (desktopSize.width - loginSize.width) / 2;
int height = (desktopSize.height - loginSize.height) / 2;
login.setLocation(width, height);
login.setVisible(true);
desktopPane.add(login);
try {
login.setSelected(true);
} catch (java.beans.PropertyVetoException e) {}
我还设置了 JInternalFrame 的首选大小。
但是,登录框架出现在 desktopPane 的左上角,其中大部分是不可见的(即在 desktopPane 的“外部”)。
我主要关注this Java documentation。 我还从this post 和this post 获得了 setLocation() 信息。
我在这里做错了什么导致 JInternalFrame 不集中?任何帮助表示赞赏。
【问题讨论】:
-
Toolkit.getDefaultToolkit().getScreenSize()是一个糟糕的选择,因为它没有考虑任务栏或停靠栏等系统元素 - 您可以使用setLocationRelativeTo并传递它null -
我的猜测是
LoginUI没有预定义的大小,目前的大小为0x0 -
@MadProgrammer - 根据我链接的第一篇文章,JInternalFrame 没有 setLocationRelativeTo(null) 实现。无论如何我测试了它并得到了一个错误。此外,正如我在帖子中指出的那样,LoginUI(我的 JInternalFrame)确实具有预定义的大小。我可以看到框架的一部分,它只是在 JDesktopPanel 之外的一部分。例如,如果我将位置设置为 setLocation(200,300),则框架在 JDesktopPane 中完全可见。
-
“根据我链接 JInternalFrame 的第一篇文章没有 setLocationRelativeTo(null) 实现” - 我不是在谈论
JInternalFrame,我在谈论 @ 987654332@。 *“确实有我在帖子中提到的预定义大小” - 我可以看到你打电话给getSize,但我没有看到你打电话给setSize(或pack)的任何地方,因为我们将您的代码应用到它工作的示例中
标签: java center jinternalframe jdesktoppane