| 1234567891011121314151617181920212223242526272829303132 |
- 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<T, V> implements BiConsumer<Container, T> {
- Function<T, ? extends Collection<V>> getChildren;
- Function<? super V, ? extends Component> makeView;
-
- @Override
- public void accept(final Container parent, final T model) {
- final Collection<V> 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);
- }
- }
|