Recherche…


Remarques

Les propriétés sont observables et des écouteurs peuvent y être ajoutés. Ils sont systématiquement utilisés pour les propriétés des Node .

Types de propriétés et nom

Propriétés standard

Selon le type de propriété, il existe jusqu'à 3 méthodes pour une seule propriété. Soit <property> le nom d'une propriété et <Property> le nom de la propriété avec une première lettre en majuscule. Et laissez T être le type de la propriété; Pour les wrappers primitifs, nous utilisons le type primitif ici, par exemple, String pour StringProperty et double pour ReadOnlyDoubleProperty .

Nom de la méthode Paramètres Type de retour Objectif
<property>Property () La propriété elle-même, par exemple
DoubleProperty , ReadOnlyStringProperty , ObjectProperty<VPos>
renvoyer la propriété elle-même pour ajouter des écouteurs / des liaisons
get<Property> () T renvoyer la valeur enveloppée dans la propriété
set<Property> (T) void définir la valeur de la propriété

Notez que le setter n'existe pas pour les propriétés en lecture seule.

Propriétés de la liste en lecture seule

Les propriétés de liste en lecture seule sont des propriétés qui fournissent uniquement une méthode de lecture. Le type d'une telle propriété est ObservableList , de préférence avec un agrument de type spécifié. La valeur de cette propriété ne change jamais; le contenu de ObservableList peut être modifié à la place.

Propriétés de la carte en lecture seule

Semblable aux propriétés de liste en lecture seule, les propriétés de la carte en lecture seule fournissent uniquement un getter et le contenu peut être modifié au lieu de la valeur de la propriété. Le getter renvoie un ObservableMap .

Exemple de StringProperty

L'exemple suivant montre la déclaration d'une propriété ( StringProperty dans ce cas) et montre comment lui ajouter un 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");
    }
    
}

Exemple ReadOnlyIntegerProperty

Cet exemple montre comment utiliser une propriété wrapper en lecture seule pour créer une propriété dans laquelle il est impossible d'écrire. Dans ce cas, le cost et le price peuvent être modifiés, mais le profit sera toujours le 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow