蘇拉傑和willcodejavaforfood把我的良好的軌道上。
檢查pack()
方法實際做了什麼,我發現這主要是將當前大小設置爲由getPreferredSize()
返回的大小。
由此看來,我設法讓這樣的解決方案:
// Creating the panel
JPanel lPanel = new JPanel();
//lPanel.setSize(1000, 1000); //default size, not needed anymore
lPanel.setLayout(new BoxLayout(lPanel, BoxLayout.PAGE_AXIS));
//Adding the content
lPanel.add(new JLabel("Blah"));
// etc...
//Adjust the panel to its preferred size
lPanel.setSize(lPanel.getPreferredSize());
//Call the layout method
//(this will adjust the content components to their correct size and position)
lPanel.doLayout();
這種方法可以正常工作,並調整面板,其內容爲正確的尺寸(和回答我的問題在一個簡單的方法:「如何找到首選大小?getPreferredSize()
「)。
但是,它需要將初始大小設置爲足夠大的大小,以便內容適合,否則它們不會放在佈局上。這有點可惜,並不是真的「乾淨」,但我現在無法找到避免這種情況的方法。
編輯:其實,默認大小是沒有必要的,因爲getPreferredSize()
返回正確的值,甚至稱doLayout()
之前。因此,在調用佈局方法之前,面板可以設置爲適當的大小。
如果我的面板在窗口中,但此方法不工作,則此方法可行。我動態地創建這個面板,直接繪製它。在我自己使用它之前,它在任何窗口中都不可見。問題更多的是「如何與沒有窗口的* pack()*相同的效果」。 – Gnoupi 2010-02-09 09:45:19
將它放入JFrame和調用包,然後刪除面板的工作?:) – willcodejavaforfood 2010-02-09 09:57:07
@willcodejavaforfood - 我剛剛嘗試過,它確實有效,但是在過程中添加JFrame似乎有些矯枉過正;) – Gnoupi 2010-02-09 10:27:07