2012-01-23 147 views
1

嗨我一直在學習Java Swing來創建一個國際象棋遊戲來練習我的Java編程技巧。Java Swing面板大小

我在JFrame的東邊加了一個JPanel,用BorderLayout,我用setPrefferedSize(new Dimension(x,y))方法來設置寬度和高度。

之後,我創建了4個JPanel,並在之前創建的面板上添加了BoxLayout

我試圖與setSize(x,y)setPreferredSize(new Dimension(x,y))設置4個板的尺寸,但它dosent工作了4個板全自動改變,因此尺寸以適應主JPanel並在其中一人添加一個JLabel後,它的大小增加自動。

這是我的代碼:

this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
JPanel a = new JPanel(); 
a.setPreferredSize(new Dimension(50, 50)); //this dosent work 
a.add(min); 
a.setBackground(Color.red); 
this.add; 

JPanel b = new JPanel(); 
b.setBackground(Color.blue); 
this.add(b); 

JPanel c = new JPanel(); 

this.add(c); 

JPanel d = new JPanel(); 
d.setBackground(Color.black); 
this.add(d); 

我怎樣才能改變這些面板的大小?

+0

你正在處理的這些問題是依賴於佈局的。使用「BoxLayout」是強制性的嗎?對我個人而言,我會使用'GridLayout'來完成您正在嘗試完成的任務。 – fireshadow52

+2

另請參閱此[示例](http://stackoverflow.com/a/2562685/230513)和[變體](http://stackoverflow.com/a/2563350/230513);更多[這裏](http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi/7229662)。 – trashgod

+0

那些確實是BoxLayout問題。嘗試使用'Grid'佈局,它將會更加符合你的期望。 – Sheriff

回答

3

BoxLayout最適合沿單一軸線佈置各種尺寸爲的組件。來自Javadocs:

「BoxLayout嘗試按其首選寬度(對於水平佈局)或高度(對於垂直佈局)安排組件。」

這個想法是,他們可能有不同的高度(對於水平佈局),它將採取最大高度。而且,他們肯定可能有不同的寬度。此外,BoxLayout可以與一些呃「有趣」的填充片一起使用,例如Box.createHorizontalGlue().這些實際上對於靈活的,可調整大小的佈局非常有用,一旦你掌握了它的內容。但是,總而言之,BoxLayout是用於靈活,可調整大小不同尺寸項目的佈局。

對於更簡單的情況,特別是如果你想首選寬度和首選高度是「尊重」,使用GridLayout其他人都建議。