鍍金池/ 教程/ Java/ JavaFX屬性
安裝e(fx)clipse到Eclipse (JavaFX工具)
JavaFX屬性
JavaFX文本域(輸入框)
JavaFX切換按鈕
JavaFX曲線
JavaFX教程
JavaFX菜單(Menu)
JavaFX快速入門
JavaFX復(fù)選框
JavaFX ScrollPane布局
JavaFX綁定
JavaFX顏色選擇器(ColorPicker)
JavaFX進度指示器
JavaFX按鈕
JavaFX TitledPane布局
JavaFX圓弧
JavaFX開發(fā)環(huán)境安裝配置
在Eclipse安裝JavaFX Scene Builder
JavaFX路徑
JavaFX VBox
JavaFX線條
JavaFX漸變顏色
JavaFX集合
JavaFX BorderPane布局
JavaFX DatePicker
JavaFX單選按鈕
JavaFX滾動條
JavaFX矩形橢圓
JavaFX GridPane布局
JavaFX HBox
JavaFX進度條
JavaFX多邊形折線
JavaFX超鏈接
JavaFX密碼字段
JavaFX Accordion布局
JavaFX概述和簡介
JavaFX選擇框
JavaFX文本
JavaFX顏色
JavaFX文件選擇器(FileChooser)
JavaFX標簽
JavaFX FlowPane布局

JavaFX屬性

JavaFX屬性存儲控件的內(nèi)部狀態(tài),并允許我們監(jiān)聽來自JavaFX UI控件的狀態(tài)更改。JavaFX屬性可以彼此綁定。綁定行為允許屬性根據(jù)來自另一個屬性的更改值來同步其值。

JavaFX屬性的類型

有兩種類型的JavaFX屬性:

  • 讀寫(Read/Writable)
  • 只讀(Read-Only)

JavaFX的屬性包含實際值,并提供更改支持,無效支持和綁定功能。所有JavaFX屬性類都位于javafx.beans.property.*包命名空間中。
下面的列表是常用的屬性類。

  • javafx.beans.property.SimpleBooleanProperty
  • javafx.beans.property.ReadOnlyBooleanWrapper
  • javafx.beans.property.SimpleintegerProperty
  • javafx.beans.property.ReadOnlyintegerWrapper
  • javafx.beans.property.SimpleDoubleProperty
  • javafx.beans.property.ReadOnlyDoubleWrapper
  • javafx.beans.property.SimpleStringProperty
  • javafx.beans.property.ReadOnlyStringWrapper

Simple的屬性是讀/寫屬性類。擁有ReadOnly的屬性是只讀屬性。

讀/可寫屬性

讀/寫屬性是可以讀取和修改的屬性值。例如,SimpleStringProperty類創(chuàng)建一個字符串屬性,該屬性對包裝的字符串值是可讀寫的。
以下代碼演示了SimpleStringProperty類的一個實例,并通過set()方法修改該屬性。

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Main{
  public static void main(String[] args) {
    StringProperty password  = new SimpleStringProperty("yiibai.com");
    password.set("example.com");
    System.out.println("Modified StringProperty "  + password.get() );
  }
}

上面的代碼生成以下結(jié)果。

Modified StringProperty example.com

上面的代碼聲明了類型為StringProperty的變量password,并分配給SimpleStringProperty類的實例。實際的值是字符串“yiibai.com”,它被傳遞到SimpleStringProperty類的構(gòu)造函數(shù)中。

要讀取值,請調(diào)用get()方法或getValue()方法,該方法返回實際的包裝值。如果要修改這個值,請調(diào)用set()方法或setValue()并傳入一個字符串值。

只讀屬性

要創(chuàng)建只讀屬性,請使用以ReadOnly作為前綴的包裝類。創(chuàng)建只讀屬性需要兩個步驟。

  1. 實例化只讀包裝類
  2. 調(diào)用方法getReadOnlyProperty()返回一個真正的只讀屬性對象
ReadOnlyStringWrapper userName = new ReadOnlyStringWrapper("yiibai.com"); 
ReadOnlyStringProperty readOnlyUserName  = userName.getReadOnlyProperty();

JavaFX JavaBean

以下代碼顯示了如何創(chuàng)建JavaFX JavaBean。當(dāng)構(gòu)建基于Swing的應(yīng)用程序時,我們使用gettersetter創(chuàng)建JavaBean。

然后我們必須通過Swing模型類在UI邏輯中獲取和設(shè)置數(shù)據(jù)。通過使用JavaFX屬性創(chuàng)建JavaFX JavaBean,JavaFX將執(zhí)行數(shù)據(jù)綁定,并完成域模型類和UI控件之間的數(shù)據(jù)交換作業(yè)。參考以下代碼 -

import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

class User {
  private final static String USERNAME_PROP_NAME = "userName";
  private final ReadOnlyStringWrapper userName;
  private final static String PASSWORD_PROP_NAME = "password";
  private StringProperty password;

  public User() {
    userName = new ReadOnlyStringWrapper(this, USERNAME_PROP_NAME,"fake user");
    password = new SimpleStringProperty(this, PASSWORD_PROP_NAME, "");
  }
  public final String getUserName() {
    return userName.get();
  }

  public ReadOnlyStringProperty userNameProperty() {
    return userName.getReadOnlyProperty();
  }

  public final String getPassword() {
    return password.get();
  }

  public final void setPassword(String password) {
    this.password.set(password);
  }

  public StringProperty passwordProperty() {
    return password;
  }
}

屬性更改事件

屬性可以通知值更改的事件處理程序,以便在屬性更改時進行響應(yīng)處理相關(guān)操作。JavaFX屬性對象包含一個addListener()方法,它接受兩種類型的功能接口:ChangeListenerinvalidationListener
所有JavaFX屬性都是實現(xiàn)了ObservableValueObservable接口,它們分別為ChangeListenerinvalidationListener提供了addListener()方法。

以下代碼顯示如何創(chuàng)建ChangeListener來注冊到屬性。當(dāng)屬性的值發(fā)生改變時,將調(diào)用change()方法。

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

public class Main {// copyright w  w w .Yi I b A I .COm 
  public static void main(String[] args) {
    SimpleIntegerProperty xProperty = new SimpleIntegerProperty(0);

    // Adding a change listener with anonymous inner class
    xProperty.addListener(new ChangeListener<Number>() {
      @Override
      public void changed(ObservableValue<? extends Number> ov, Number oldVal,
          Number newVal) {
        System.out.println("old value:"+oldVal);
        System.out.println("new value:"+newVal);
      }
    });

    // Adding a change listener with lambda expression
    xProperty.addListener((ObservableValue<? extends Number> ov, Number oldVal,
        Number newVal) -> {
          System.out.println("old value:"+oldVal);
          System.out.println("new value:"+newVal);
      });
  }
}

以下代碼顯示了如何創(chuàng)建一個invalidationListener以向?qū)傩宰?。隨著屬性的值改變,將調(diào)用invalidated()方法。

import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.SimpleIntegerProperty;

public class Main {
  public static void main(String[] args) {
    SimpleIntegerProperty xProperty = new SimpleIntegerProperty(0);

    // Adding a invalidation listener (anonymous inner class)
    xProperty.addListener(new InvalidationListener() {
      @Override
      public void invalidated(Observable o) {
        System.out.println(o.toString());
      }
    });

    // Adding a invalidation listener (lambda expression)
    xProperty.addListener((Observable o) -> {
      System.out.println(o.toString());
    });

  }
}

ChangeListenerinvalidationListener之間的區(qū)別。

  • 使用ChangeListener將可獲取Observable(ObservableValue)的舊值和新值。
  • 使用invalidationListener只獲取Observable對象(屬性)

上一篇:JavaFX集合下一篇:JavaFX漸變顏色