2012-01-23 97 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其他人都建议。