add calculating methods to bind

Tom Eugelink tbee at tbee.org
Fri May 23 06:11:45 UTC 2014


https://javafx-jira.kenai.com/browse/RT-37255


On 2014-5-23 8:05, Martin Sladecek wrote:
> That would be nice. Don't forget to add it to JIRA!
>
> -Martin
>
> On 23.5.2014 07:11, Tom Eugelink wrote:
>>
>> I feel the standard binding should offer an easy hook option
>>
>> heightProperty().multiply(3.4).calc( value -> { snap(vallue); } ).add(5.0)
>>
>>
>> On 2014-5-21 22:00, Tomas Mikula wrote:
>>> Just a side note, you could use
>>>
>>>      EasyBind.map(heightProperty(), value ->
>>> NodeUtil.snapXY(value.doubleValue() * 0.2));
>>>
>>> instead of
>>>
>>>      snap(heightProperty().multiply(0.2))
>>>
>>> and you don't need your custom DoubleBinding implementation. But note
>>> that it returns Binding<Double>, not DoubleBinding.
>>>
>>> EasyBind is at http://www.fxmisc.org/easybind/
>>>
>>> Tomas
>>>
>>> On Wed, May 21, 2014 at 9:47 PM, Tomas Mikula <tomas.mikula at gmail.com> wrote:
>>>> Yeah, and you could also eliminate "Observable... dependencies" from
>>>> snap's signature, since now you are not using them to invalidate your
>>>> binding.
>>>>
>>>> On Wed, May 21, 2014 at 9:36 PM, Tom Eugelink <tbee at tbee.org> wrote:
>>>>> Found it! Slightly different DoubleBinding was required (copied it from
>>>>> negate).
>>>>>
>>>>>      private DoubleBinding snap(final ObservableNumberValue value, final
>>>>> Observable... dependencies) {
>>>>>          return new DoubleBinding() {
>>>>>              {
>>>>>                  super.bind(value);
>>>>>              }
>>>>>
>>>>>              @Override
>>>>>              public void dispose() {
>>>>>                  super.unbind(value);
>>>>>              }
>>>>>
>>>>>              @Override
>>>>>              protected double computeValue() {
>>>>>                  return NodeUtil.snapXY(value.doubleValue());
>>>>>
>>>>>              }
>>>>>
>>>>>              @Override
>>>>>              public ObservableList<?> getDependencies() {
>>>>>                  return FXCollections.singletonObservableList(value);
>>>>>              }
>>>>>          };
>>>>>
>>>>>      }
>>>>>
>>>>>
>>>>>
>>>>> On 2014-5-21 21:34, Tomas Mikula wrote:
>>>>>> Hi Tom,
>>>>>>
>>>>>> it seems to me that in your custom DoubleBinding implementation
>>>>>> `other` is not its dependency, thus it does not react to it's
>>>>>> invalidations.
>>>>>>
>>>>>> Tomas
>>>>>>
>>>>>> On Wed, May 21, 2014 at 9:25 PM, Tom Eugelink <tbee at tbee.org> wrote:
>>>>>>> I came up with this:
>>>>>>>
>>>>>>> startXProperty().bind( *snap(*heightProperty().multiply(0.2)) )
>>>>>>>
>>>>>>>
>>>>>>> And then:
>>>>>>>
>>>>>>>       private DoubleBinding snap(final ObservableNumberValue other, final
>>>>>>> Observable... dependencies) {
>>>>>>>           return new DoubleBinding() {
>>>>>>>               {
>>>>>>>                   super.bind(dependencies);
>>>>>>>               }
>>>>>>>
>>>>>>>               @Override
>>>>>>>               public void dispose() {
>>>>>>>                   super.unbind(dependencies);
>>>>>>>               }
>>>>>>>
>>>>>>>               @Override
>>>>>>>               protected double computeValue() {
>>>>>>>                   return NodeUtil.snap(other.doubleValue());
>>>>>>>               }
>>>>>>>
>>>>>>>               @Override
>>>>>>>               public ObservableList<?> getDependencies() {
>>>>>>>                   return new
>>>>>>> ImmutableObservableList<Observable>(dependencies);
>>>>>>>               }
>>>>>>>           };
>>>>>>>       }
>>>>>>>
>>>>>>> But that always returns 0... I feel this should have worked.
>>>>>>>
>>>>>>> Tom
>>>>>
>>>>>
>>
>>
>




More information about the openjfx-dev mailing list