package org.leumasjaffe.recipe.controller; import java.awt.Component; import java.awt.Container; import java.util.Collection; import java.util.function.BiConsumer; import java.util.function.Function; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; @RequiredArgsConstructor @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true) public class ReplaceChildrenController implements BiConsumer { Function> getChildren; Function makeView; @Override public void accept(final Container parent, final T model) { final Collection children = getChildren.apply(model); if (parent.getComponents().length == children.size()) { return; } // Make sure that our components disappear correctly for (final Component comp : parent.getComponents()) { comp.setVisible(false); } parent.removeAll(); children.stream().map(makeView).forEach(parent::add); } }