Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Jeff Higgins Newsgroups: comp.lang.c,comp.lang.java.programmer Subject: Re: Self-updating relationship Date: Wed, 02 Sep 2015 23:38:54 -0400 Organization: A noiseless patient Spider Lines: 101 Message-ID: References: <55E766BD.3060303@verizon.net> <55E77D04.6080200@verizon.net> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 3 Sep 2015 03:38:30 +0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="a78aad8b483612fbf45d18e918df0cca"; logging-data="22904"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/QSnC34wPdfakYzuRW6buBFArgkVGnOnE=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.8.0 In-Reply-To: <55E77D04.6080200@verizon.net> Cancel-Lock: sha1:1Yt4KBSTS0Bb9iKkf8I0bokdfb4= Xref: csiph.com comp.lang.c:69050 comp.lang.java.programmer:32481 On 09/02/2015 06:49 PM, James Kuyper wrote: > On 09/02/2015 05:25 PM, Stefan Ram wrote: >> James Kuyper writes: >>>> final javafx.beans.property.IntegerProperty height >>>> = new javafx.beans.property.SimpleIntegerProperty( 10 ); >>>> final javafx.beans.property.IntegerProperty number >>>> = new javafx.beans.property.SimpleIntegerProperty( 2 ); >>>> final javafx.beans.binding.NumberBinding spaces = >>>> height.subtract( number ); >>>> java.lang.System.out.println( spaces.getValue() ); >>>> height.set( 20 ); >>>> java.lang.System.out.println( spaces.getValue() ); }} >>> What's the java feature that makes "spaces" above update automatically? >>> To put it another way - if I didn't want such updates, what should I >>> write differently? >> >> This depends on the details of the behavior you want instead. > > I read a bit about Java many years ago, and reached the conclusion that > it had some syntactic similarities C++, but had a very different way of > implementing objects. I played with it long enough to get something > working, but concluded that it wasn't what I needed for any purpose I > was trying to achieve at the time. I'm otherwise very unfamiliar with java. > > I get the impression from what you're saying, that the code you've shown > results in each call to spaces.getValue() performing a fresh calculation > of height-number, using the values of those things at the time > getValue() is called. I'm asking about what you would have to do > differently to have spaces set to the value of height - number at one > particular time, and to have spaces.getValue() continue to report that > same value, even if the values of height and number later change. It > seems to me that this should be easier than arranging for automatic > updates - in fact, I'd expect it to be trivial. > >> For one example, you can simply omit »height.set( 20 )«, and >> »spaces« will not be updated. Or, you could just write: > > Well, I'm asking how to ensure that "spaces" will not be updated, even > if "height" is, so that doesn't qualify. > >> public final class Main >> { public static void main( final java.lang.String[] args ) >> { final javafx.beans.property.IntegerProperty spaces >> = new javafx.beans.property.SimpleIntegerProperty( 8 ); >> java.lang.System.out.println( spaces.getValue() ); }} >> >> Which just will print »8« and not update spaces, or just >> >> public final class Main >> { public static void main( final java.lang.String[] args ) >> { int const spaces = 8; java.lang.System.out.println( spaces ); }} > > Those both set spaces to 8, rather than height - number. If > height-number is currently 8, that happens to be the right value, but > isn't what I'm looking for. > >> or just, >> >> public final class Main >> { public static void main( final java.lang.String[] args ) >> { java.lang.System.out.println( 8 ); }} >> >> to get the same behavior. > > That seems to print out 8 without even storing it anywhere, and without > any connection to "height" or "number". > You may use the unbind method of the javafx.beans.property.Property interface. import javafx.beans.property.IntegerProperty; import javafx.beans.property.SimpleIntegerProperty; public class Main { public static void main(String[] args) { final IntegerProperty height = new SimpleIntegerProperty(); final IntegerProperty number = new SimpleIntegerProperty(); final IntegerProperty spaces = new SimpleIntegerProperty(); spaces.bind(height.subtract(number)); height.set(10); number.set(2); System.out.print(spaces.get()); // 8 spaces.unbind(); height.set(20); System.out.print(spaces.get()); // 8 } }