concept JG22Network is Swingable { new MainPanel mainPanel; new G22Network network; // margin on bottom/right transient int margin = 50; class MainPanel extends JPanel { *() { super(null); } // no layout manager public Dimension getPreferredSize() { Rect r = combinedChildBounds(); ret new Dimension(r.x2()+margin, r.y2()+margin); } void revalidateMe() { revalidateIncludingFullCenterContainer(this); repaint(); } } *(G22Network *network) { for (element : network.elements) visualizeElement(element); } void visualizeElement(G22NetworkElement element) swing { mainPanel.add(new JG22NetworkElement(element).visualize()); mainPanel.revalidateMe(); } void newElement { new G22NetworkElement element; element.network(network); network.elements.add(element); network.change(); visualizeElement(element); } cachedVisual withRightAlignedButtons(jscroll_center_borderless(mainPanel), "New element", rThread newElement); }