Java Swing 设置“实际”框架尺寸(内部)

发布于 2024-11-05 06:37:28 字数 223 浏览 3 评论 0原文

我有一个 JFrame,其中只包含一个 JPanel。 我尝试过设置面板的大小并包装框架,但这没有效果。

如果我设置 JFrame 的大小,它将更改大小,使其包括标题栏和边框。 如何设置“实际大小”,使其不包括标题栏和边框?

示例:

Example

提前致谢,伙计们

I have a JFrame which contains just one JPanel.
I have tried setting the Panel's size and packing the frame, but that has no effect.

If I set the JFrame's size, it will change the size so it includes the title bar and borders.
How do I set the "actual size" so it doesn't include the title bar and borders?

Example:

Example

Thanks in advance, guys

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

掩耳倾听 2024-11-12 06:37:28

您可以在 JFrame 上设置 contentPane 的首选大小和调用包,但通常最好让组件根据其布局管理器确定的首选大小自行调整大小。

You could set the contentPane's preferredSize and call pack on the JFrame, but in general it's usually best to let components size themselves based on their preferred sizes as determined by their layout managers.

无妨# 2024-11-12 06:37:28

这是设置 JPanel 大小和包装框架的示例:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);

您尝试过这样的操作吗?

This is an example of setting JPanel's size and packing the frame:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);

Did you try something like this?

最佳男配角 2024-11-12 06:37:28

如果您设置 JPanel 的首选大小,那么 JFrame 的 pack() 方法将遵循它。

If you set the preferred size of the JPanel then the JFrame's pack() method will respect it.

萌吟 2024-11-12 06:37:28

使用 JFrame 上的 .getInsets 方法可以为您提供非客户区域周围尺寸的尺寸。

然后将其添加到您想要的尺寸,并使用 setSize 设置尺寸。

Use the .getInsets method on JFrame which gives you the dimensions of the sizes around the non-client area.

Then add it up to your wanted size, and set the size using setSize.

电影里的梦 2024-11-12 06:37:28

如果您想获取框架边框,请首先在框架上使用 pack,然后获取框架 Insets,如下面的代码所示:

frame.pack();
Insets insets = frame.getInsets();
int frameLeftBorder = insets.left;
int frameRightBorder = insets.right;
int frameTopBorder = insets.top;
int frameBottomBorder = insets.bottom;

最好使用 pack< /strong> 方法紧随您的 setResizing(boolean) 方法之后,因为由于某种原因调整大小会改变您的框架边框,但如果您不使用调整大小方法,则直接使用 pack 方法框架构造函数的开始。

If you want to get Frame border then first use pack on your frame and after that get Frame Insets like in this code bellow:

frame.pack();
Insets insets = frame.getInsets();
int frameLeftBorder = insets.left;
int frameRightBorder = insets.right;
int frameTopBorder = insets.top;
int frameBottomBorder = insets.bottom;

Is better to use the pack method right after your setResizable(boolean) method, because resizable for some reason changes your frame borders, but if you dont use resize method then use pack method right on the start of frame constructor.

毅然前行 2024-11-12 06:37:28

设置 JFrame 中可用空间的实际大小可以通过设置容器的首选大小来完成
createComponents(Container 容器) 方法。通过这种方式,您可以跳过设置大小
通过 run() 方法中的 setPreferredSize(new Dimension (width, length)) 来调整整个 JFrame 的大小。因此,代码将如下所示:

@Override
public void run() {
    JFrame frame = new JFrame();
    // other code ...
    this.createCompoents(frame.getContentPane());
}

private void createCompoents(Container container) {
   // other code ...
   container.setPreferredSize(new Dimension(width, length));
}

Setting the actual size of the usable space in JFrame could be done through setting the preferred size of the container in
createComponents(Container container) method. Done in this way, you skip setting the size of
the whole JFrame through setPreferredSize(new Dimension (width, length) in the run() method. So, the code will look like this:

@Override
public void run() {
    JFrame frame = new JFrame();
    // other code ...
    this.createCompoents(frame.getContentPane());
}

private void createCompoents(Container container) {
   // other code ...
   container.setPreferredSize(new Dimension(width, length));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文