代码之家  ›  专栏  ›  技术社区  ›  viraptor

布局和最小尺寸

  •  1
  • viraptor  · 技术社区  · 14 年前

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

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

    (何处) this :jpanel,布局为空, scrap :jpanel,带框布局和子项)

    这个 废钢 调整大小为 (0,0) -尽管我在NetBeans的属性编辑器中设置了最小和首选大小。除了强迫,我怎么能阻止这个? scrap.setSize(scrap.getPreferredSize()) ?

    1 回复  |  直到 14 年前
        1
  •  1
  •   trashgod    14 年前

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

    附录:哎呀,我误解了这个问题。只要做

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

    使用您想要的值 w h . 如果 this 是一个间隔,布局不重要。

    附录:再近一点看,尺寸为 scrap 可能正在动态变化。您可以覆盖 getPreferredSize() 因此。当您使用GUI设计器时,您的面板具有如下声明:

    public class NewJPanel extends javax.swing.JPanel
    

    您可以在类内部但在生成的代码折叠之外添加所需的方法:

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

    旁白:GUI设计器是一个 帮助 这假定您了解底层布局管理器。注意要求您对每个面板都使用它,并且许多布局都是公平的 straightforward . 我经常看到设计师使用的面板需要更复杂的布局,如 GroupLayout SpringLayout .