У меня раздражающая проблема с менеджерами компоновки Java. У меня следующая ситуация: На панели A есть две другие панели B с абсолютной разметкой и C с FlowLayout. 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" ) );
}
}