Suche…


Bemerkungen

Eigenschaften sind beobachtbar und Listener können hinzugefügt werden. Sie werden konsequent für die Eigenschaften von Node .

Arten von Eigenschaften und Benennung

Standardeigenschaften

Je nach Art der Eigenschaft gibt es bis zu 3 Methoden für eine einzelne Eigenschaft. Lassen Sie <property> den Namen einer Eigenschaft und <Property> den Namen der Eigenschaft mit einem Großbuchstaben angeben. Und sei T der Typ der Immobilie; Für primitive Wrapper verwenden wir hier den primitiven Typ, z. B. String für StringProperty und double für ReadOnlyDoubleProperty .

Methodenname Parameter Rückgabetyp Zweck
<property>Property () Die Immobilie selbst, z
DoubleProperty , ReadOnlyStringProperty , ObjectProperty<VPos>
Gibt die Eigenschaft selbst zurück, um Listener / Binding hinzuzufügen
get<Property> () T Gibt den in der Eigenschaft umschlossenen Wert zurück
set<Property> (T) void Legen Sie den Wert der Eigenschaft fest

Beachten Sie, dass der Setter für Readonly-Eigenschaften nicht vorhanden ist.

Listet nur Eigenschaften auf

Readonly-Listeneigenschaften sind Eigenschaften, die nur eine Getter-Methode bereitstellen. Der Typ einer solchen Eigenschaft ist ObservableList , vorzugsweise mit dem angegebenen Typ agrument. Der Wert dieser Eigenschaft ändert sich nie. Der Inhalt der ObservableList kann stattdessen geändert werden.

Readonly-Karteneigenschaften

Ähnlich wie bei Readonly-Listeneigenschaften bieten Readonly-Karteneigenschaften nur einen Getter, und der Inhalt kann anstelle des Eigenschaftswerts geändert werden. Der Getter gibt eine ObservableMap .

StringProperty-Beispiel

Das folgende Beispiel zeigt die Deklaration einer Eigenschaft (in diesem Fall StringProperty ) und zeigt, wie ein ChangeListener wird.

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-Beispiel

In diesem Beispiel wird gezeigt, wie Sie mit einer readonly-Wrapper-Eigenschaft eine Eigenschaft erstellen, in die nicht geschrieben werden kann. In diesem Fall können die cost und der price geändert werden, der profit jedoch immer der 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow