gpt4 book ai didi

java - 为什么 JFrame setSize() 方法没有正确设置大小?

转载 作者:太空狗 更新时间:2023-10-29 22:38:08 25 4
gpt4 key购买 nike

所以我已经用 java 编程了一个学期左右,我遇到过几次这个问题,终于抽出时间来问了。

如果我创建一个 JFrame 然后设置大小,例如 setSize(400,800)。该帧实际上不是 800 像素 长。据我所知,它实际上更像 770(或可能 769)像素 长。此外,如果您将垂直尺寸设置得非常低(低于 30),框架甚至不会显示,只有操作系统的顶部窗口栏和框架不会变大,直到您的值超过 30(所以setSize(400,0) 看起来与 setSize(400,20) 相同。这是为什么,不难解决,但很奇怪,我很好奇为什么会这样?

如果您需要有关任何内容的更多信息,请询问,我会为您提供。

最佳答案

JFrame SetSize() 包含 Area + Border。

我认为你必须设置 ContentPane 的大小

jFrame.getContentPane().setSize(800,400);

因此,我建议您使用嵌入在 JFrame 中的 JPanel,然后在该 JPanel 上进行绘制。这将最大限度地减少您的问题。

JFrame jf = new JFrame();
JPanel jp = new JPanel();
jp.setPreferredSize(new Dimension(400,800));// changed it to preferredSize, Thanks!
jf.getContentPane().add( jp );// adding to content pane will work here. Please read the comment bellow.
jf.pack();

我正在阅读 Javadoc

The JFrame class is slightly incompatible with Frame. Like all other JFC/Swing top-level containers, a JFrame contains a JRootPane as its only child. The content pane provided by the root pane should, as a rule, contain all the non-menu components displayed by the JFrame. This is different from the AWT Frame case. For example, to add a child to an AWT frame you'd write:

frame.add(child);

However using JFrame you need to add the child to the JFrame's content pane instead:

frame.getContentPane().add(child);

关于java - 为什么 JFrame setSize() 方法没有正确设置大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com