package examples; import java.awt.*; import javax.swing.*; public class CascadingLayout extends FlowLayout { static final int OFFSET = 15; /* (non-Javadoc) * @see java.awt.FlowLayout#preferredLayoutSize(java.awt.Container) */ @Override public Dimension preferredLayoutSize(Container c) { layoutContainer(c); Component[] children = c.getComponents(); if (children.length > 0) { Rectangle r = children[children.length-1].getBounds(); return new Dimension(r.x+r.width, r.y+r.height); } return super.preferredLayoutSize(c); } /* (non-Javadoc) * @see java.awt.FlowLayout#layoutContainer(java.awt.Container) */ @Override public void layoutContainer(Container c) { Component[] children = c.getComponents(); int i = 0; for (Component comp: children) { comp.setLocation(i,i); comp.setSize(comp.getPreferredSize()); ((JComponent) comp).setOpaque(false); i += OFFSET; } } public static void main(String[] args) { JFrame f = new JFrame("Cascade"); f.setLayout(new CascadingLayout()); for (int i = 0; i < 10; i++) f.add(new JButton("button " + i)); f.pack(); f.setVisible(true); } }