首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Insets.top,左,下,右全零

Insets.top,左,下,右全零
EN

Stack Overflow用户
提问于 2012-10-03 23:32:23
回答 5查看 3.2K关注 0票数 2

这是我用来实例化JFrame的代码示例:

代码语言:javascript
复制
public class TestFrame{
public static void main(String[] args){
    JFrame frame = new JFrame();
    Insets insets = frame.getInsets();
    frame.setSize(new Dimension(insets.right + insets.left + 400, insets.bottom + insets.top + 400));
    System.out.println(String.format("Top = %d \nBottom = %d \nLeft = %d \n Right
            = %d", insets.top, insets.bottom, insets.left, insets.right));

    frame.setResizable(false);
    frame.setVisible(true);
}
}

框架显示得很好,但所有的插入似乎都等于零。我需要知道顶部标题栏的大小,因为我想要一个大小为400x400的内容窗格。

我在多个平台上测试了它,在windows和mac上也发生了同样的事情。

我做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-03 23:37:14

  1. 如果您希望内容窗格精确到400x400,那么我会考虑将其preferredSize设置为400x400 (虽然我不想强制设置首选大小,但在某些情况下,这在内容窗格上可能是可以接受的)。
  2. 在设置首选大小之后,在显示框架之前,对框架调用pack()

这是最干净、最简单的解决方案,您不必关心边框插入。

票数 5
EN

Stack Overflow用户

发布于 2012-10-03 23:37:21

如果contentPane应该恰好是400x400,那么为它的preferredSize创建一个返回它的类,并将它用作contentPane:

代码语言:javascript
复制
class MyContentPane extends JPanel {
   public static final int PREF_W = 400;
   public static final int PREF_H = 400;

   public Dimension getPreferredSize() {
     return new Dimension(PREF_W, PREF_H);
   }
}

或者更好:

代码语言:javascript
复制
class MyContentPane extends JPanel {
   public int prefW;
   public int prefH;

public MyContentPane(int prefW, int prefH) {
   this.prefW = prefW;
   this.prefH = prefH;
}

   public Dimension getPreferredSize() {
     return new Dimension(prefW, prefH);
   }
}

正如其他海报所提到的,您必须在顶层窗口中使用pack(),并使用布局管理器。

就我自己而言,我不喜欢这样做,而是让各种组件的实际首选大小和容器的布局管理器为我做所有这些决定。

票数 5
EN

Stack Overflow用户

发布于 2012-10-03 23:38:43

  1. 在面板中创建ui。
  2. 设置面板的首选大小。
  3. 将面板添加到frame并调用pack()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12711822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档