У меня раздражающая проблема с менеджерами компоновки 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" ) );
}
}