Java 布局和最小尺寸
我正在尝试在现有窗体上插入一个最小大小的新面板。不幸的是,在我这样做之后:Java 布局和最小尺寸,java,swing,layout,size,Java,Swing,Layout,Size,我正在尝试在现有窗体上插入一个最小大小的新面板。不幸的是,在我这样做之后: this.add(scrap); this.moveScrapCentre(scrap); // runs setLocation(...) this.revalidate(); this.repaint(); (其中此:JPanel带空布局,报废:JPanel带框布局和子项) 尽管我在Netbeans的属性编辑器中设置了最小大小和首选大小,但碎片的大小将调整为(0,0)。除了强制执行scrap.setSize(scr
this.add(scrap);
this.moveScrapCentre(scrap); // runs setLocation(...)
this.revalidate();
this.repaint();
(其中此
:JPanel带空布局,报废
:JPanel带框布局和子项)
尽管我在Netbeans的属性编辑器中设置了最小大小和首选大小,但碎片的大小将调整为(0,0)
。除了强制执行scrap.setSize(scrap.getPreferredSize())
之外,如何防止这种情况发生?“尽管我们强烈建议您使用布局管理器,但您可以在没有布局管理器的情况下执行布局。通过将容器的布局属性设置为null,可以使容器不使用布局管理器。使用这种称为绝对定位的策略,您必须指定容器中每个组件的大小和位置。绝对定位的一个缺点是,调整顶级容器的大小时,绝对定位不能很好地调整。它也不能很好地适应用户和系统之间的差异,例如不同的字体大小和地区。”-
附录:哎呀,我误解了这个问题。就这么做吧
this.setPreferredSize(new Dimension(w, h));
使用所需的w
和h
值。如果此
是一个间隔,则布局应该无关紧要
附录:再仔细观察,scrap
的大小可能会动态变化。您可以相应地覆盖getPreferredSize()
。当您使用GUI设计器时,您的面板有一个类似以下内容的声明:
public class NewJPanel extends javax.swing.JPanel
您可以在类内部但在生成的代码折叠之外添加所需的方法:
@Override
public Dimension getPreferredSize() {
return new Dimension(w, h);
}
旁白:GUI设计器是一种辅助工具,它假定您了解底层布局管理器。注意要求您在每个面板上都使用它,而且许多布局都相当复杂。我经常看到设计器的用途保留在需要更复杂布局的面板上,例如GroupLayout
和SpringLayout
”尽管我们强烈建议您使用布局管理器,但您可以在不使用布局管理器的情况下执行布局。通过将容器的布局属性设置为null,可以使容器不使用布局管理器。使用这种称为绝对定位的策略,您必须指定容器中每个组件的大小和位置。绝对定位的一个缺点是,调整顶级容器的大小时,绝对定位不能很好地调整。它也不能很好地适应用户和系统之间的差异,例如不同的字体大小和地区。”-
附录:哎呀,我误解了这个问题。就这么做吧
this.setPreferredSize(new Dimension(w, h));
使用所需的w
和h
值。如果此
是一个间隔,则布局应该无关紧要
附录:再仔细观察,scrap
的大小可能会动态变化。您可以相应地覆盖getPreferredSize()
。当您使用GUI设计器时,您的面板有一个类似以下内容的声明:
public class NewJPanel extends javax.swing.JPanel
您可以在类内部但在生成的代码折叠之外添加所需的方法:
@Override
public Dimension getPreferredSize() {
return new Dimension(w, h);
}
旁白:GUI设计器是一种辅助工具,它假定您了解底层布局管理器。注意要求您在每个面板上都使用它,而且许多布局都相当复杂。我经常看到设计器的用途保留在需要更复杂布局的面板上,例如GroupLayout
和SpringLayout
这个问题相关吗d到?@trashgood:不,这是针对实际元素的,不是间隔,我的间隔在正确的布局中。这个问题与吗?@trashgood:不,这是针对实际元素的,不是间隔,我的间隔在正确的布局中。