Ricerca…


Osservazioni

Le proprietà sono osservabili e gli ascoltatori possono essere aggiunti a loro. Sono costantemente utilizzati per le proprietà dei Node .

Tipi di proprietà e denominazione

Proprietà standard

A seconda del tipo di proprietà, ci sono fino a 3 metodi per una singola proprietà. Lascia che <property> denoti il ​​nome di una proprietà e <Property> il nome della proprietà con una prima lettera maiuscola. E sia T il tipo di proprietà; per i wrapper primitivi usiamo il tipo primitivo qui, ad es. String for StringProperty e double per ReadOnlyDoubleProperty .

Nome del metodo parametri Tipo di reso Scopo
<property>Property () La proprietà stessa, ad es
DoubleProperty , ReadOnlyStringProperty , ObjectProperty<VPos>
restituire la proprietà stessa per l'aggiunta di listener / binding
get<Property> () T restituire il valore racchiuso nella proprietà
set<Property> (T) void imposta il valore della proprietà

Notare che il setter non esiste per proprietà readonly.

Visualizza le proprietà in sola lettura

Le proprietà elenco di Readonly sono proprietà che forniscono solo un metodo getter. Il tipo di tale proprietà è ObservableList , preferibilmente con un tipo agrument specificato. Il valore di questa proprietà non cambia mai; il contenuto di ObservableList può essere modificato.

Visualizza di sola lettura le proprietà

Analogamente all'elenco di proprietà in sola lettura, le proprietà della mappa readonly forniscono solo un getter e il contenuto può essere modificato al posto del valore della proprietà. Il getter restituisce una ObservableMap .

Esempio StringProperty

L'esempio seguente mostra la dichiarazione di una proprietà ( StringProperty in questo caso) e illustra come aggiungere un ChangeListener ad esso.

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");
    }
    
}

Esempio ReadOnlyIntegerProperty

Questo esempio mostra come utilizzare una proprietà wrapper readonly per creare una proprietà a cui non è possibile scrivere. In questo caso, il cost e il price possono essere modificati, ma il profit sarà sempre il 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow