Buscar..


Observaciones

Las propiedades son observables y se pueden agregar oyentes. Se utilizan constantemente para las propiedades de Node s.

Tipos de propiedades y nombres

Propiedades estandar

Dependiendo del tipo de propiedad, hay hasta 3 métodos para una sola propiedad. Deje que <property> indique el nombre de una propiedad y <Property> el nombre de la propiedad con una primera letra en mayúscula. Y sea T el tipo de propiedad; para envolturas primitivas usamos el tipo primitivo aquí, por ejemplo, String para StringProperty y double para ReadOnlyDoubleProperty .

Nombre del método Parámetros Tipo de retorno Propósito
<property>Property () La propiedad en sí, por ejemplo.
DoubleProperty , ReadOnlyStringProperty , ObjectProperty<VPos>
devolver la propiedad en sí para agregar oyentes / vinculante
get<Property> () T Devolver el valor envuelto en la propiedad.
set<Property> (T) void establecer el valor de la propiedad

Tenga en cuenta que el configurador no existe para las propiedades de solo lectura.

Propiedades de la lista de solo lectura

Las propiedades de la lista de solo lectura son propiedades que proporcionan solo un método de obtención. El tipo de dicha propiedad es ObservableList , preferiblemente con un tipo de documento especificado. El valor de esta propiedad nunca cambia; el contenido de la lista ObservableList se puede cambiar en su lugar.

Propiedades de mapas de solo lectura

Al igual que en las propiedades de la lista de solo lectura, las propiedades del mapa de solo lectura proporcionan un captador y el contenido puede modificarse en lugar del valor de la propiedad. El getter devuelve un ObservableMap .

Ejemplo de StringProperty

El siguiente ejemplo muestra la declaración de una propiedad ( StringProperty en este caso) y muestra cómo agregar un ChangeListener a ella.

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

Ejemplo de ReadOnlyIntegerProperty

Este ejemplo muestra cómo usar una propiedad de contenedor de solo lectura para crear una propiedad en la que no se puede escribir. En este caso, el cost y el price pueden modificarse, pero el profit siempre será el 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow