javafx
プロパティと観測可能
サーチ…
備考
プロパティは観測可能であり、リスナを追加できます。これらはNode
のプロパティーに一貫して使用されます。
プロパティと名前の種類
標準プロパティ
プロパティのタイプによっては、1つのプロパティに対して最大3つのメソッドがあります。 <property>
は<property>
の名前を示し、 <Property>
は大文字の最初の文字を持つプロパティの名前を示します。そして、 T
プロパティの型とする。プリミティブラッパーのために、私たちはここにプリミティブ型、例えば、使用String
のためのStringProperty
とdouble
ためReadOnlyDoubleProperty
。
メソッド名 | パラメーター | 戻り値の型 | 目的 |
---|---|---|---|
<property>Property | () | プロパティそのもの、例えばDoubleProperty 、 ReadOnlyStringProperty 、 ObjectProperty<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の例
この例は、読み取り専用のラッパー・プロパティーを使用して、書き込めないプロパティーを作成する方法を示しています。この場合、 cost
とprice
は変更できますが、 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