abstract sclass DynSCP extends DynModule { transient SingleComponentPanel scp; transient ReliableSingleThread rstRevisualize2 = new(r revisualize2_impl); /*final*/ JComponent visualize() { ret scp = singleComponentPanel(visualize2()); } void unvisualize() { scp = null; unvisualize2(); } JComponent visualize2() { null; } void unvisualize2() {} // overridable void revisualize2() { rstRevisualize2.trigger(); } void revisualize2_impl() { lock lock; if (scp != null) scp.setComponent(visualize2()); } void setComponent(JComponent c) { if (scp != null) scp.setComponent(c); } JComponent getComponent() { ret scp == null ? null : (JComponent) scp.getComponent(); } bool isShowing() { ret scp != null; } }