Zoeken…


Opmerkingen

Eigenschappen zijn waarneembaar en luisteraars kunnen eraan worden toegevoegd. Ze worden consequent gebruikt voor eigenschappen van Node .

Typen eigenschappen en naamgeving

Standaard eigenschappen

Afhankelijk van het type onroerend goed, zijn er maximaal 3 methoden voor een enkele eigenschap. Laat <property> de naam van een eigenschap aangeven en <Property> de naam van de eigenschap met een hoofdletter. En laat T het type eigendom zijn; voor primitieve wrappers gebruiken we hier het primitieve type, bijv. String voor StringProperty en double voor ReadOnlyDoubleProperty .

Methode naam parameters Retourtype Doel
<property>Property () De eigenschap zelf, bijvoorbeeld
DoubleProperty , ReadOnlyStringProperty , ObjectProperty<VPos>
retourneer de eigenschap zelf voor het toevoegen van luisteraars / binding
get<Property> () T retourneer de waarde verpakt in de eigenschap
set<Property> (T) void stel de waarde van de eigenschap in

Merk op dat de setter niet bestaat voor alleen-lezen eigenschappen.

Alleen lijst met eigenschappen

Alleen-lezen lijsteigenschappen zijn eigenschappen die alleen een getter-methode bieden. Het type van een dergelijke eigenschap is ObservableList , bij voorkeur met een gespecificeerd type agrument. De waarde van deze eigenschap verandert nooit; de inhoud van de ObservableList kan in plaats daarvan worden gewijzigd.

Alleen-kaart eigenschappen

Vergelijkbaar met alleen-lezen-lijsteigenschappen alleen-kaarteigenschappen bieden alleen een getter en de inhoud kan worden gewijzigd in plaats van de eigenschapswaarde. De getter retourneert een ObservableMap .

StringProperty-voorbeeld

Het volgende voorbeeld toont de declaratie van een eigenschap ( StringProperty in dit geval) en laat zien hoe u een ChangeListener eraan kunt toevoegen.

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

Dit voorbeeld laat zien hoe u een eigenschap readonly wrapper gebruikt om een eigenschap te maken waarnaar niet kan worden geschreven. In dit geval kunnen cost en price worden gewijzigd, maar profit is altijd 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow