|
|
@@ -5,7 +5,9 @@ import javax.swing.JPanel;
|
|
|
import org.jdesktop.swingx.VerticalLayout;
|
|
|
import org.leumasjaffe.observer.ObservableListener;
|
|
|
import org.leumasjaffe.observer.ObserverDispatch;
|
|
|
+import org.leumasjaffe.recipe.controller.ReplaceChildrenController;
|
|
|
import org.leumasjaffe.recipe.model.Element;
|
|
|
+import org.leumasjaffe.recipe.model.Ingredient;
|
|
|
|
|
|
import lombok.AccessLevel;
|
|
|
import lombok.Getter;
|
|
|
@@ -20,6 +22,7 @@ import java.awt.GridBagConstraints;
|
|
|
@SuppressWarnings("serial")
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
public class ElementPanel extends JPanel {
|
|
|
+ ReplaceChildrenController<Element, Ingredient> controller;
|
|
|
ObservableListener<JLabel, Element> nameListener;
|
|
|
ObservableListener<JPanel, Element> childListener;
|
|
|
|
|
|
@@ -27,6 +30,8 @@ public class ElementPanel extends JPanel {
|
|
|
@Getter(AccessLevel.PACKAGE) JPanel panelIngredients;
|
|
|
|
|
|
public ElementPanel(final Element element) {
|
|
|
+ controller = new ReplaceChildrenController<>(
|
|
|
+ Element::getIngredients, IngredientPanel::new);
|
|
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
|
|
gridBagLayout.columnWidths = new int[]{0, 0, 0};
|
|
|
gridBagLayout.rowHeights = new int[]{0, 0, 0};
|
|
|
@@ -52,10 +57,8 @@ public class ElementPanel extends JPanel {
|
|
|
add(panelIngredients, gbc_panel);
|
|
|
|
|
|
nameListener = new ObservableListener<>(lblProductName, (c, t) -> c.setText(t.getName()));
|
|
|
- childListener = new ObservableListener<>(panelIngredients, (c, t) -> {
|
|
|
- c.removeAll();
|
|
|
- element.getIngredients().stream().map(IngredientPanel::new).forEach(c::add);
|
|
|
- });
|
|
|
+ childListener = new ObservableListener<>(panelIngredients, (c, t) ->
|
|
|
+ controller.accept(c, t));
|
|
|
|
|
|
nameListener.setObserved(element);
|
|
|
childListener.setObserved(element);
|