我对 Java 的布局管理器有一个恼人的问题。我有以下情况:在面板A中有两个具有绝对布局的面板B和具有 FlowLayout 的C。B是高度定制的,并且通过setPreferredSize
. C应具有与B相同的固定宽度,但在其他方面具有可变高度,具体取决于流中添加了多少组件。生成的 A应该具有固定的宽度和高度——至少这是我想要的。A.height + B.height
但是我得到的是面板A的宽度根本不固定(即使我设置了它的首选大小),并且面板C中的内容不会自动换行,而是显示在一条长线上。当然,这也使B的宽度大于应有的宽度。
我能做些什么来解决这个问题?有没有更好的布局,还是我必须使用绝对布局来模拟所有这些?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Test extends JPanel
{
public Test ()
{
this.setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) );
JPanel top = new JPanel( null );
top.setBackground( Color.GREEN );
top.setPreferredSize( new Dimension( 200, 20 ) );
JPanel flowPanel = new JPanel( new FlowLayout( FlowLayout.LEFT, 2, 2 ) );
this.add( top );
this.add( flowPanel );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
}
}