2010-09-05 201 views
1

我试图插入设置到现有形式的最小尺寸新面板。之后,不幸的是我这样做:布局和最小尺寸

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

(其中this:JPanel的使用空布局,scrap:JPanel的有包装的布局和儿童)

scrap被调整为(0,0) - 尽管我同时设置最小和首选Netbeans属性编辑器中的大小。除了强迫scrap.setSize(scrap.getPreferredSize())之外,我怎样才能防止这种情况?

+0

这个问题是不是与http://stackoverflow.com/questions/3644775? – trashgod 2010-09-05 14:15:47

+0

@trashgod:不,这是用于实际的元素,而不是间隔元素,我已经在适当的布局中获得了我的间隔符。 – viraptor 2010-09-05 14:46:48

回答

1

“虽然我们强烈建议您使用布局管理器,你可以没有他们进行布局。通过设置容器的布局属性设置为null,则使容器不使用布局管理器。这个策略称为绝对定位,你必须该容器中的指定的每个部件的尺寸和位置。的绝对定位的一个缺点是它没有调整好时,顶层容器被调整大小,也没有调整好向用户和系统,如不同的字体之间的差异大小和区域设置“ - Setting the Layout Manager

附录:哎呀,我误解了问题。刚开始使用的wh你的期望值做

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

。如果this是间隔符,则布局应该没有关系。

附录:寻找尚未接近,的scrap大小可以被动态地改变。您可以相应地覆盖getPreferredSize()。当你正在使用的GUI设计师,你的面板上有一个声明是这样的:

public class NewJPanel extends javax.swing.JPanel 

您可以添加类生成的代码折叠内而外所需要的方法:

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

旁白: GUI设计者是援助,它假定了解底层的布局管理器。注意要求您为每个面板使用它,许多布局相当straightforward。我经常看到设计师的使用保留用于需要更复杂布局的面板,例如GroupLayoutSpringLayout

+0

@viraptor:更多上面。 – trashgod 2010-09-05 16:06:24