文档章节

(转帖)Implementing custom JavaFx Bindings

E
 Ellipse
发布于 2013/12/11 17:02
字数 444
阅读 82
收藏 0
点赞 0
评论 0

Built in Bindings

Probably you know the JavaFx property binding. ( If not here is a tutorial ). There are several ways to create a binding. The easiest way is to use the  bind  or  bindBidirectional  methods of the property you want to bind. For more complex bindings you can use the  Bindings  class. It provide a lot of special bindings as static methods e.g. ones that calulate number values, concat string properties, bind ObservableLists, ObservableMaps etc., but nothing for  BigDecimal ...

Here we have certain excamples for that:

//Binding with the bind method of a property
StringProperty prop1 = new SimpleStringProperty();
StringProperty prop2 = new SimpleStringProperty();
prop1.bind(prop2);
 
prop2.set("Hello World");
Assert.assertEquals(prop1.get(), prop2.get());
 
 
//Binding with Bindings.add method
IntegerProperty int1 = new SimpleIntegerProperty();
IntegerProperty int2 = new SimpleIntegerProperty();
NumberBinding sum = Bindings.add(int1, int2);
 
int1.set(2);
int2.set(3);
Assert.assertEquals(5, sum.getValue().intValue());

Custom implemented Bindings

If the built in bindings do not fit your needs, JavaFx provides base classes, that you can use for custom implemented bindings. You find them in the package  javafx.beans.bindings  and all their names end with  Binding .

There are only two things to do in your subclass of one of the  Binding  classes:

  • Think about on which other properties your new binding is dependand of. Normally this are the properties you calculate your new value of. Use the bind method to add those properties to the dependencies of the new binding in the initializer block (as done in the examples below) or in the constructor. If the value of one of those changes, the binding value is newly calculated.

  • Implement the computeValue method, which returns the new value of the binding.

Normally you think of numbers to compute a value. But you can do this with every object, that can be created from other values, if you use the ObjectBinding class.  

Here are several examples for that:

//Simple custom IntegerBinding implementation
IntegerProperty intVal = new SimpleIntegerProperty();
IntegerBinding modulo2 = new IntegerBinding() {
    { bind(intVal);}
    protected int computeValue() {
        return intVal.get() % 2;
    }
};
intVal.set(3);
Assert.assertEquals(1, modulo2.get());
intVal.set(4);
Assert.assertEquals(0, modulo2.get());
 
 
//Custom ObjectBinding of BigDecimal with two dependencies
ObjectProperty<BigDecimal> price = new SimpleObjectProperty<>();
ObjectProperty<BigDecimal> amount = new SimpleObjectProperty<>();
ObjectBinding<BigDecimal> totalPrice = new ObjectBinding<BigDecimal>() {
    { bind(price,amount);}
    protected BigDecimal computeValue() {
        if (price.get() == null || amount.get() == null) return null;
        return price.get().multiply(amount.get());
    }
};
 
price.set(new BigDecimal("3.50"));
amount.set(new BigDecimal("2.0"));
Assert.assertEquals(new BigDecimal("7.000"), totalPrice.get());
 
 
//Custom ObjectBinding of Rectangle2D with three dependencies
ObjectProperty<Bounds> boundsInLocalProperty = new SimpleObjectProperty<>();
DoubleProperty widthProperty = new SimpleDoubleProperty();
DoubleProperty heightProperty = new SimpleDoubleProperty();
 
ObjectBinding<Rectangle2D> rectBinding = new ObjectBinding<Rectangle2D>() {
    {bind(boundsInLocalProperty, widthProperty, heightProperty);}
    protected Rectangle2D computeValue() {
        Bounds bounds = boundsInLocalProperty.get();
        return new Rectangle2D(bounds.getMinX(), bounds.getMinY(),
                               widthProperty.get(), heightProperty.get());
    }
};


本文转载自:http://johnthecodingarchitect.blogspot.co.nz/2013/11/implementing-custom-javafx-bindings.html

共有 人打赏支持
E
粉丝 45
博文 61
码字总数 41290
作品 0
大连
程序员
Luke 7.3.1 发布,UI 框架已转为使用 JavaFX

Luke 7.3.1 已发布,新版本使用的 UI 框架已换成 JavaFX 。具体更新内容如下: #97: Luke atop JavaFX (the branch is now master) #104: Fixed 'user id is too big' error when packaging......

淡漠悠然 ⋅ 05/16 ⋅ 0

JavaFX 已从 JDK 中独立拆分,早期预览版开放下载

今年 3 月,我们曾报道过 Oracle 从 JDK 11 开始将把 JavaFX 将作为独立模块从 JDK 中分离出来,以使 JavaFX 更易于被采用的消息。近日,Oracle 在邮件列表上宣布,独立的 JavaFX SDK 早期预...

王练 ⋅ 05/10 ⋅ 4

java计算器(基于Javafx)

Swing被Javafx取代,还是很多人用,我们学校老师也在用swing,虽然老版资料更多,但是我还是决定用javafx,不是因为用着顺手,而是swing框架不再更新后,会有很多弊端。完全仿照Windows里的C...

j_linlian ⋅ 05/16 ⋅ 0

JavaFX 8 WebView中的WebKit版本

19向下投票接受 您可以通过查询 WebView引擎的用户代理字符串来确定在WebView中使用的WebKit的基本版本。 这显示了适用于Java 8u5的WebKit版本537.44。 这是JavaFX实现中使用的WebKit的上游版...

xiaomin0322 ⋅ 06/13 ⋅ 0

逻辑部分Java实现,想加个客户端界面,用什么技术方便,学习价值高?

想在windows跑的客户端。 之前学过一点wpf,没深入,转java阵营了。好像微软又偏爱uwp了,真坑。 javaFX学习的价值大不大?在win7以及以上的系统绑定一个16M的javafxre.jar就不需要再额外安装...

土拨薯啊 ⋅ 05/26 ⋅ 0

基于 JavaFX 开发的聊天客户端 - OIM

一、简介 OIM是一套即时通讯的聊天系统,在这里献给大家,一方面希望能够帮助对即时通讯有兴趣研究的朋友,希望我们能够共同进步,另一个就是希望能够帮助到需要即时通讯系统的朋友或者企业,...

烙灵 ⋅ 2017/06/09 ⋅ 23

Oracle Java SE 8 发行版更新:限制商业或生产用途

Oracle Java SE 8 发行版更新 Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底。 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务...

抢小孩糖吃 ⋅ 04/18 ⋅ 61

JavaFX,controller属性空指针

fxml controller main 点击myButton的时候,MyController中myTextField为空,setText时候报错。 初学者,按照教程来的,感觉像是没有初始化到。...

Kylin_Shaw ⋅ 05/09 ⋅ 0

编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting ⋅ 06/15 ⋅ 0

javaFX实例1-webView实现简单浏览器

webView: 是一个管理webEngine和显示它中间内容的节点。这个对象只能从fx的线程中创建。 webEngine: 是一个管理网页的不可见控件,它可以加载网页,创建文档模型,运行javascript,加载必要...

xiaomin0322 ⋅ 06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从方法论到零售客户实践 解码阿里巴巴数据中台——2018上海云栖大会

摘要: 一、数据中台之道 6月8日,上海云栖大会进入了第二天的议程,数据中台专场论坛座无虚席,数据中台总架构师邓中华女士向在场的观众介绍了数据中台的衍生发展之道。 基于OneID、OneData...

阿里云云栖社区 ⋅ 16分钟前 ⋅ 0

Ubuntu部署django问题汇总

使用Anaconda3的Python3.6的pip安装UWSGI报错 原因是gcc版本不兼容,安装4.7并修改gccsudo apt-get install gcc-4.7sudo mv /usr/bin/gcc /usr/bin/gcc.baksudo ln -s /usr/bin/gcc-4.......

wuyaSama ⋅ 19分钟前 ⋅ 0

从方法论到零售客户实践 解码阿里巴巴数据中台——2018上海云栖大会

摘要: 一、数据中台之道 6月8日,上海云栖大会进入了第二天的议程,数据中台专场论坛座无虚席,数据中台总架构师邓中华女士向在场的观众介绍了数据中台的衍生发展之道。 基于OneID、OneData...

猫耳m ⋅ 19分钟前 ⋅ 0

Docker减肥小记

如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察 如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的镜像、容器、网络和数据卷… 1、查看...

寰宇01 ⋅ 30分钟前 ⋅ 0

微信小程序中如何使用WebSocket实现长连接(含完整源码)

本文由腾讯云技术团队原创,感谢作者的分享。 1、前言 微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架、组件以及 API,在这个平台上面的想象空间很大。腾讯云研究了一...

JackJiang- ⋅ 38分钟前 ⋅ 0

定制库到Maven本地资源库

1.如果只有定制库的JAR文件 下载链接如下:pdf.jar 2.使用命令转换成Maven本地资源 mvn install:install-file -Dfile=/Users/manager/Downloads/clj-pdf-2.2.33.jar -DgroupId=clj-pdf -Dar......

年少爱追梦 ⋅ 42分钟前 ⋅ 0

高仿springmvc之xuchen-mvc

package org.mvc.framework.servlet; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.......

徐志 ⋅ 44分钟前 ⋅ 0

关于自定义URLStreamHandler的一次踩坑

关于自定义URLStreamHandler的一次踩坑 20180625 lambo init 说明 一般自定义实现url的协议解析.方案为实现URLStreamHandler.实现其 openConnection 就可以了, 如果我们执行 new URL("xx://...

林小宝 ⋅ 45分钟前 ⋅ 0

【SM2证书】利用BC的X509v3CertificateBuilder组装X509国密证书

演示证书文件 链接: https://pan.baidu.com/s/1ijHNnMQJj7jzW-jXEVd6Gg 密码: vfva 所需jar包 <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on --> <dependenc......

小帅帅丶 ⋅ 46分钟前 ⋅ 0

用Calendar 实现 计算 一段时间的毫秒值

Calendar c=Calendar.getInstance();c.add(Calendar.MONTH, -1);int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH)......

岸芷汀兰 ⋅ 50分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部