The choice of layout manager can be crucial.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AddingComponents extends JPanel
{
GridBagConstraints gbc;
public AddingComponents()
{
setLayout(new GridBagLayout());
gbc = new GridBagConstraints();
gbc.insets = new Insets(5,5,5,5);
gbc.weightx = 1.0;
gbc.weighty = 1.0;
}
private JPanel getUIPanel()
{
JButton add = new JButton("add components");
add.addActionListener(new ActionListener()
{
int count = 0;
public void actionPerformed(ActionEvent e)
{
for(int j = 0; j < 4; j++)
{
if((j + 1) % 4 == 0)
gbc.gridwidth = gbc.REMAINDER;
else
gbc.gridwidth = 1;
add(new JButton("button " + ++count), gbc);
}
revalidate();
}
});
JPanel panel = new JPanel();
panel.add(add);
return panel;
}
public static void main(String[] args)
{
AddingComponents ac = new AddingComponents();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(ac.getUIPanel(), "North");
f.getContentPane().add(new JScrollPane(ac));
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
}