Explorar el Código

Use ObservableController with an automagic value checker.

Sam Jaffe hace 5 años
padre
commit
32130b9fa0
Se han modificado 2 ficheros con 15 adiciones y 6 borrados
  1. 1 1
      pom.xml
  2. 14 5
      src/main/lombok/org/leumasjaffe/recipe/view/IngredientPanel.java

+ 1 - 1
pom.xml

@@ -58,7 +58,7 @@
     <dependency>
       <groupId>org.leumasjaffe</groupId>
       <artifactId>observer</artifactId>
-      <version>0.4.1</version>
+      <version>0.5.0</version>
     </dependency>
     <dependency>
       <groupId>org.leumasjaffe</groupId>

+ 14 - 5
src/main/lombok/org/leumasjaffe/recipe/view/IngredientPanel.java

@@ -11,7 +11,7 @@ import java.util.Locale;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.NumberFormatter;
 
-import org.leumasjaffe.event.AnyActionDocumentListener;
+import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Ingredient;
 
@@ -21,6 +21,7 @@ import javax.swing.JLabel;
 
 @SuppressWarnings("serial")
 public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
+	ObservableController<JTextField, Ingredient> controller;
 	private JTextField txtName;
 		
 	public IngredientPanel(final Ingredient ingredient) {
@@ -84,10 +85,12 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 		add(txtPreparation, gbc_txtPreparation);
 		txtPreparation.setColumns(10);
 		
-		addDocumentListener((AnyActionDocumentListener) (e) -> {
-			ingredient.setName(txtName.getText());
-			ObserverDispatch.notifySubscribers(ingredient);
-		});
+		// I technically don't need to listen here as of this change,
+		// but if I ever restore support for it, it will be convenient.
+		controller = new ObservableController<>(txtName,
+				Ingredient::getName, Ingredient::setName,
+				JTextField::setText);
+		controller.setObserved(ingredient);
 	}
 
 	@Override
@@ -99,5 +102,11 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 	public void removeDocumentListener(DocumentListener dl) {
 		this.txtName.getDocument().removeDocumentListener(dl);
 	}
+	
+	@Override
+	public void removeNotify() {
+		super.removeNotify();
+		ObserverDispatch.unsubscribeAll(controller);
+	}
 
 }