|
|
@@ -4,6 +4,7 @@ import java.util.Objects;
|
|
|
import java.util.function.BiConsumer;
|
|
|
import java.util.function.BiFunction;
|
|
|
import java.util.function.Consumer;
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
import javax.swing.text.JTextComponent;
|
|
|
|
|
|
@@ -38,6 +39,17 @@ public class ObservableController<S extends JTextComponent, T extends Observable
|
|
|
AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
|
|
|
}
|
|
|
|
|
|
+ public ObservableController(final S comp, final Function<T, String> get,
|
|
|
+ final BiConsumer<T, String> set, final BiConsumer<? super S, String> update) {
|
|
|
+ super(comp, (c, u) -> update.accept(c, get.apply(u)));
|
|
|
+ this.func = (t, u) -> {
|
|
|
+ if (t.equals(get.apply(u))) return false;
|
|
|
+ set.accept(u, t);
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Construct an ObservableController that modifies its model whenever the linked
|
|
|
* JTextComponent is updated, including deleting all of the text.
|
|
|
@@ -55,6 +67,20 @@ public class ObservableController<S extends JTextComponent, T extends Observable
|
|
|
e -> onEmpty.accept( impl.getModel() ),
|
|
|
evt -> accept( ) );
|
|
|
}
|
|
|
+
|
|
|
+ public ObservableController(final S comp, final Function<T, String> get,
|
|
|
+ final BiConsumer<T, String> set, final BiConsumer<? super S, String> update,
|
|
|
+ final Consumer<T> onEmpty) {
|
|
|
+ super(comp, (c, u) -> update.accept(c, get.apply(u)));
|
|
|
+ this.func = (t, u) -> {
|
|
|
+ if (t.equals(get.apply(u))) return false;
|
|
|
+ set.accept(u, t);
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ AnyActionDocumentListener.emptyOrText( comp,
|
|
|
+ e -> onEmpty.accept( impl.getModel() ),
|
|
|
+ evt -> accept( ) );
|
|
|
+ }
|
|
|
|
|
|
private boolean update() {
|
|
|
return func.apply( impl.getComponent().getText( ), impl.getModel() );
|