布局和最小尺寸

时间:2010-09-05 04:50:34

标签: java swing layout size

我正在尝试将最小尺寸设置的新面板插入到现有表单中。不幸的是,在我这样做之后:

this.add(scrap);
this.moveScrapCentre(scrap); // runs setLocation(...)
this.revalidate();
this.repaint();

(其中this:JPanel为null布局,scrap:JPanel包含框布局和子项)

scrap调整为(0,0) - 即使我在Netbeans的属性编辑器中设置了最小和首选大小。除了强制scrap.setSize(scrap.getPreferredSize())之外,我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

“虽然我们强烈建议您使用布局管理器,但您可以在没有它们的情况下执行布局。通过将容器的布局属性设置为null,可以使容器不使用布局管理器。使用此策略称为绝对定位,您必须指定该容器中每个组件的大小和位置。绝对定位的一个缺点是,当调整顶层容器的大小时它不能很好地调整。它也不能很好地适应用户和系统之间的差异,例如不同的字体大小和语言环境。“ - Setting the Layout Manager

附录:糟糕,我误解了这个问题。只是做

this.setPreferredSize(new Dimension(w, h));

使用您想要的wh值。如果this是间隔符,则布局无关紧要。

附录:仔细观察,scrap的大小可能会动态变化。您可以相应地覆盖getPreferredSize()。当您使用GUI设计器时,您的面板会声明如下:

public class NewJPanel extends javax.swing.JPanel

您可以在类中添加所需的方法,但在生成的代码之外:

@Override
public Dimension getPreferredSize() {
    return new Dimension(w, h);
}

除此之外:GUI设计器是一个 aid ,它假定您对底层布局管理器有所了解。注意要求您将它用于每个面板,并且许多布局都相当straightforward。我经常看到设计师的用途是为需要更复杂布局的面板保留,例如GroupLayoutSpringLayout