gpt4 book ai didi

java - 布局和最小尺寸

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:37 26 4
gpt4 key购买 nike

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

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

(其中 this:具有空布局的 JPanel,scrap:具有框布局和子项的 JPanel)

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

最佳答案

“虽然我们强烈建议您使用布局管理器,但您也可以不使用它们来执行布局。通过将容器的布局属性设置为 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 设计器是一个辅助,它假定了解底层布局管理器。注意要求您将它用于每个面板,并且许多布局相当 straightforward 。我经常看到设计者将其用于需要更复杂布局的面板,例如 GroupLayoutSpringLayout

关于java - 布局和最小尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3645054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com