Huh? What does the EDT have to do with property binding?

On Sep 18, 11:21 pm, Kevin Wright <kev.lee.wri...@gmail.com> wrote:
> The best part of this approach is that streams can be composed and filtered,
> so you could take window.height, and subtract splitbar.position to yield a
> new stream
> (operator overloading and closures help here)
> The result, also a stream, can then be assigned to the height of a panel in
> a window layout.

Sounds like needless complication to me. If properties with binding
had existed and I needed this, you can bind with a filter, and you can
choose whether it should be one-way (changing the window size changes
the panel) or two-way (changing the panel's height also scales up the
entire window). Yes, closure support would be handy to make the filter
API nicer, but I don't see how treating the property as a blocking
iterator helps. In fact, it hurts, a lot. It means you need a
bajillion threads. This isn't a big deal these days, you can have
thousands on a single system, but it does gulp down quite a bit of
memory to maintain all those stacks. It would look something like
this:

window.height.addOnChange(#(h) {
    panel.height = h / 3;
}

looks elegant, easy to read, easy to maintain, and flexible to me!

With your stream example, it would have to look like this (I'm sure
I'm screwing this up, it can't be this obtuse!):

new Thread(#() {
    for (int h : window.height.stream()) {
        panel.height.push(h / 3);
    }
}).start();


It also doesn't appear to solve the endless loop issue that can be a
bit complicated to avoid when specifying the properties system: If you
bind A to B and B to C, how do we ensure that changing for example A
doesn't cause an endless cascade of property updates, each continuing
the endless loop by issues new onChange calls? The usual solution is
to not propagate a new change event when a new value equals the old
value, and that works. An addition can be that if A is changed in the
middle of A itself propagating an earlier change, an exception is
thrown (because this is not going to end well).

Using an iterator is not going to make any of that any easier.

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javapo...@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to