iT邦幫忙

DAY 7
2

java菜鳥的學習筆記系列 第 7

灰煞煞之Java FX 2.0-Properties and Bindings-Part 1

自覺有一些java基礎,買了一本Pro Java FX 2想要變長java FX Pro,事實證明:我想太多,讀到第二章前半段,不知道是書中範例有深度還是我還太淺,我還要搭配著http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm看才稍微有點頭緒,接下來就分享一下今日讀書心得,有錯的地方麻煩各位高手多指點指點。
java FX中的Property最上層是interface,置於javafx.beans.property底下,其中有各種基本型態(int, double, boolean)的class實作該介面,例如IntegerProperty、DoubleProperty、StringProperty等,
節錄DoubleProperty API說明

public abstract class DoubleProperty
extends ReadOnlyDoubleProperty
implements Property<java.lang.Number>, WritableDoubleValue

ReadOnlyDoubleProperty以及WritableDoubleValue分別是包裹了取值(get)以及設值(set)的方法,這隱含了Property的設計概念就是從JavaBean來的,而再做一些修改。

另外重要的新特性是Binding的概念,可以把一個Property物件bind到一個任何實作ObervableValue介面的物件,關於Obervable要於下次part 2時再分享,我現在也不是很清楚,但是最簡單的binding就是把兩個Property binding,另外要提的是,binding可以是單向也可以是雙向,單向的意思是被綁定(bound)的物件不能set新值,否則會產生Runtime Exception,而綁定的物件(Dependency)則可以設定新值,雙向的話被綁定以及綁定皆可以設值,且同時兩邊會設定成一樣的值(背後機制跟Invalidate Event有關,下篇討論),簡單範例如下:

import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;

public class PropertiesTest {
	public void displayProperty(){
		DoubleProperty dp=new SimpleDoubleProperty(3.14);
		DoubleProperty dp2= new SimpleDoubleProperty(0);
		
		System.out.println("Before Binding");
		System.out.println(dp.get()); //3.14
		System.out.println(dp2.get()); // 0.0
		
		dp2.bind(dp);
		System.out.println("After Binding");
		System.out.println(dp.get()); // 3.14
		System.out.println(dp2.get()); //3.14
		
		dp.set(5.68); //設定新值
		System.out.println("Dependency Value Changes");
		System.out.println(dp.get()); // 5.68
		System.out.println(dp2.get()); //5.68
		
		dp2.set(6.99); //設定被綁定的物件新值
		System.out.println("Only One Changes");
		System.out.println(dp.get()); // 5.68
		System.out.println(dp2.get()); //  java.lang.RuntimeException: A bound value cannot be set.
	        
                dp2.unbind();//解除綁定
		dp2.bindBidirectional(dp); //雙向
		dp2.set(6.99); //設定被綁定的物件新值
		System.out.println("Bidirection Changes");
		System.out.println(dp.get()); // 6.99
		System.out.println(dp2.get()); //  6.99
	}
}

上一篇
腦殘式的產生0~9不重複的數字
下一篇
灰煞煞之Java FX 2.0-Bindings Class(四則運算)Part2
系列文
java菜鳥的學習筆記28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言