2010-09-05 236 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