Java Swing设置“实际”帧大小(内部)

时间:2011-05-06 19:39:35

标签: java swing frame

我有一个只包含一个JPanel的JFrame。 我已经尝试设置Panel的大小并打包框架,但这没有效果。

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

示例:

Example

先谢谢你,伙计们

6 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:10)

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

答案 2 :(得分:9)

这是设置JPanel大小并打包框架的示例:

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

你尝试过这样的事吗?

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

如果你想获得框架边框,那么首先在你的框架上使用打包,之后获取Frame Insets ,如下面的代码所示:

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

最好在 setResizable(boolean)方法后立即使用 pack 方法,因为由于某种原因可调整大小会更改框架边框,但如果您不使用resize方法然后在框架构造函数的开头使用 pack 方法。

答案 5 :(得分:0)

在JFrame中设置可用空间的实际大小可以通过设置容器的首选大小来完成 createComponents(Container container)方法。以这种方式完成,您跳过设置的大小 通过setPreferredSize(new Dimension (width, length)方法中的run()整个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));
}