static abstract class DynamicStack extends JPanel { int spacing = 10; *() { super(new GridBagLayout); _addFiller(); } abstract GridBagConstraints _componentConstraints(); abstract GridBagConstraints _fillerConstraints(); void _addFiller { add(jrigid(), _fillerConstraints()); } void addComponent(final Component c) { addComponents(ll(c)); } void addComponents(final Collection l) { swing { for (Component c : unnull(l)) add(c, _componentConstraints(), getComponentCount()-1); revalidate(); } } void setComponents(Collection l) { removeAll(); addFiller(); addComponents(l); } void clearComponents() { setComponents(null); } int numComponents() { ret countComponents()-1; } L components() { ret dropLast(main.getComponents(this)); } DynamicStack spacing(int n) { spacing = n; this; } }