サーチ…


備考

プロパティは観測可能であり、リスナを追加できます。これらはNodeのプロパティーに一貫して使用されます。

プロパティと名前の種類

標準プロパティ

プロパティのタイプによっては、1つのプロパティに対して最大3つのメソッドがあります。 <property><property>の名前を示し、 <Property>は大文字の最初の文字を持つプロパティの名前を示します。そして、 Tプロパティの型とする。プリミティブラッパーのために、私たちはここにプリミティブ型、例えば、使用StringのためのStringPropertydoubleためReadOnlyDoubleProperty

メソッド名パラメーター戻り値の型目的
<property>Property () プロパティそのもの、例えば
DoublePropertyReadOnlyStringPropertyObjectProperty<VPos>
リスナー/バインディングを追加するためのプロパティ自体を返します。
get<Property> () T プロパティにラップされた値を返す
set<Property> (T) void プロパティの値を設定する

読み取り専用のプロパティの場合、セッターは存在しないことに注意してください。

読み取り専用リストのプロパティ

読み取り専用リストのプロパティは、ゲッターメソッドのみを提供するプロパティです。このようなプロパティの型はObservableList 、好ましくは型式指定が指定されています。このプロパティの値は変更されません。代わりにObservableListの内容を変更することができます。

地図のプロパティを読み上げる

読み取り専用リストプロパティと同様に、読み取り専用マッププロパティはゲッターを提供し、プロパティ値の代わりにコンテンツを変更することができます。 getterはObservableMap返します。

StringPropertyの例

次の例では、プロパティの宣言(示しStringPropertyこの場合の)および追加する方法を示しChangeListenerこれに。

import java.text.MessageFormat;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

public class Person {

    private final StringProperty name = new SimpleStringProperty();

    public final String getName() {
        return this.name.get();
    }

    public final void setName(String value) {
        this.name.set(value);
    }

    public final StringProperty nameProperty() {
        return this.name;
    }
    
    public static void main(String[] args) {
        Person person = new Person();
        person.nameProperty().addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                System.out.println(MessageFormat.format("The name changed from \"{0}\" to \"{1}\"", oldValue, newValue));
            }
            
        });
        
        person.setName("Anakin Skywalker");
        person.setName("Darth Vader");
    }
    
}

ReadOnlyIntegerPropertyの例

この例は、読み取り専用のラッパー・プロパティーを使用して、書き込めないプロパティーを作成する方法を示しています。この場合、 costpriceは変更できますが、 profitは常にprice - costとなりprice - cost

import java.text.MessageFormat;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ReadOnlyIntegerProperty;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

public class Product {
    
    private final IntegerProperty price = new SimpleIntegerProperty();
    private final IntegerProperty cost = new SimpleIntegerProperty();
    private final ReadOnlyIntegerWrapper profit = new ReadOnlyIntegerWrapper();

    public Product() {
        // the property itself can be written to
        profit.bind(price.subtract(cost));
    }

    public final int getCost() {
        return this.cost.get();
    }

    public final void setCost(int value) {
        this.cost.set(value);
    }

    public final IntegerProperty costProperty() {
        return this.cost;
    }

    public final int getPrice() {
        return this.price.get();
    }

    public final void setPrice(int value) {
        this.price.set(value);
    }

    public final IntegerProperty priceProperty() {
        return this.price;
    }

    public final int getProfit() {
        return this.profit.get();
    }

    public final ReadOnlyIntegerProperty profitProperty() {
        // return a readonly view of the property
        return this.profit.getReadOnlyProperty();
    }
    
    public static void main(String[] args) {
        Product product = new Product();
        product.profitProperty().addListener(new ChangeListener<Number>() {

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                System.out.println(MessageFormat.format("The profit changed from {0}$ to {1}$", oldValue, newValue));
            }
        
        });
        product.setCost(40);
        product.setPrice(50);
        product.setCost(20);
        product.setPrice(30);
    }
    
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow