So erstellen Sie eine Read-Only Immobilien in JavaFX

Obwohl in JavaFX eine schreibgeschützte Eigenschaft weniger Funktionen als eine Lese- / Schreib-Eigenschaft, es ist tatsächlich komplizierter zu implementieren. Warum? Da intern - in der Klasse, die die schreibgeschützte Eigenschaft enthält - Sie müssen den Wert der Immobilie in der Lage sein zu lesen oder zu schreiben. Aber von außen - das heißt, außerhalb der Klasse, die die schreibgeschützte Eigenschaft definiert - Sie müssen sicherstellen, dass die Nutzer lesen können, aber nicht den Wert der Eigenschaft schreiben.

Man könnte denken, dass die Setter-Methode Weglassen würde ausreichen, um eine schreibgeschützte Eigenschaft zu erstellen. Aber das Problem ist, dass zusätzlich zu Getter und Setter-Methoden, JavaFX Eigenschaften eine Eigenschaft Accessormethode aussetzen, die sich einen direkten Zugang zum Objekt Objekt zur Verfügung stellt.

Im Folgenden ist ein Beispiel dafür, wie nicht eine schreibgeschützte Eigenschaft zu erstellen:

String vorName = new SimpleStringProperty (this, "vorName", "") -public final String getFirstName () {return firstName.get () -} public String firstNameProperty () {return firstName-}

Dieser Code ist der gleiche wie der Code verwendet, um eine Lese / Schreib-Eigenschaft zu schaffen, mit der Ausnahme, dass es die weggelassen setFirstName Verfahren. Leider ist diese Eigenschaft Definition nicht Nutzer der Klasse zu verhindern, die die Eigenschaft von Modifizierung der Eigenschaft definiert. Dazu alle Benutzer benötigen würde zu tun, ist die Eigenschaft zugreifen und rufen Sie dann die Unterkunft Set direkt Methode.

Angenommen, diese Eigenschaft Teil einer Klasse ist benannt Kunde, ein Beispiel davon wird durch die Variable verwiesen cust. Der folgende Code würde den Wert des Nur-Lese-Eigenschaft festgelegt:

. Cust.getFirstName () Satz ( "Bogus Value") -

Um sicher eine schreibgeschützte Eigenschaft erstellen, müssen Sie erstellen tatsächlich zwei Kopien der Immobilie: eine schreibgeschützte Version und eine Lese / Schreib-Version. Der Nur-Lese-Version wird nach außen freigelegt werden.

Die Lese / Schreib-Version wird intern, innerhalb der Klasse verwendet, die die Eigenschaft definiert. Dann müssen Sie diese beiden Eigenschaften zu synchronisieren, so dass, wenn der Wert des internen Lese- / Eigenschaftsänderungen schreiben, wird der Wert des externen Nur-Lese-Eigenschaft wird automatisch aktualisiert.

Um dies zu erreichen, bietet JavaFX zwei zusätzliche Klassen für jede Eigenschaft Datentyp: eine schreibgeschützte Eigenschaft Klasse und eine Nur-Lese-Wrapper-Klasse. Die schreibgeschützte Eigenschaft Klasse ist, die Sie mit der Außenwelt über die Eigenschaft Accessormethode teilen. Der Nur-Lese-Wrapper-Klasse ist, die Sie auf den privaten Bereich die Eigenschaft innerhalb des Programms zu verweisen, verwendet verwenden, um erstellen.

Hier ist ein vollständiges Beispiel, das eine schreibgeschützte Integer-Eigenschaft implementiert benannt Kundennummer in einer Klasse mit dem Namen Kunde:

public class Kunde {ReadOnlyIntegerWrapper customer = new ReadOnlyIntegerWrapper (this, "customer", 0) -public letzte Integer getCustomerNumber () {return customerNumber.get () -} public final ReadOnlyIntegerProperty () customerNumberProperty () {return customerNumber.getReadOnlyProperty () - } // mehr Klasse Details gehen hier}

Der Schlüssel zum Verständnis, wie dies funktioniert, ist zu erkennen, dass die Nur-Lese-Wrapper-Klasse ist eine Erweiterung der einfachen Festigkeitsklasse, die nur eine neue Methode fügt hinzu: getReadOnlyProperty, das gibt eine schreibgeschützte Kopie der einfachen Eigenschaft. Diese schreibgeschützte Kopie wird mit dem einfachen Eigenschaft automatisch synchronisiert, so dass, wenn eine Änderung der zugrunde liegenden einfachen Eigenschaft gemacht wird, wird der Wert des Nur-Lese-Eigenschaft als auch geändert werden.

Menü