Fixe la largeur, de hauteur variable en Composite avec un débit

J'ai un problème ennuyeux avec Java gestionnaires de disposition. J'ai la situation suivante: Dans un panneau Un sont deux autres panneaux B avec une disposition absolue et C avec un FlowLayout. B est très personnalisé et a une taille fixe définie par setPreferredSize. C doivent avoir la même fixe largeur B mais sinon, être d'une hauteur variable, en fonction du nombre de composants sont ajoutés dans le flux. Le résultant Un devrait alors avoir la largeur fixe et A.height + B.height que la hauteur, c'est du moins ce que je veux.

Cependant ce que je reçois est que la largeur du panneau Un n'est pas fixe du tout (même si j'ai mis sa taille par défaut), et le contenu dans le panneau de C ne sont pas automatiquement d'emballage, mais au contraire sont affichés dans une longue lignée. Bien sûr, cela rend aussi B avoir une largeur supérieure qu'il devrait être.

Que puis-je faire pour corriger cela? Est-il une meilleure mise en page, ou dois-je reproduire le tout à l'aide d'une disposition absolue?

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" ) );
    }
}

OriginalL'auteur poke | 2010-09-06