固定宽度,JPanel中可变高度与流量

pok*_*oke 7 java swing layout-manager fixed-width

我对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" ) );
    }
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 10

换行布局应该有所帮助.