Da dies eine Frage zum Design ist, werde ich damit beginnen zu sagen, was ich habe und was ich will.Sind Eigenschaften von Eigenschaften sinnvoll?
Ich habe ein Design, das Zusammensetzung verwendet. Ein Cell
Objekt enthält eine Shape
und eine Background
Objekte (benutzerdefinierte für dieses Beispiel). Jede dieser 2 hat ihre eigenen Daten, die sie definieren. hier ist das Beispiel in Code:
class Cell {
Shape shape;
Background background;
class Shape {
int size;
Color color;
Point location;
//...
}
class Background {
Color color;
String name;
CoverType type;
//...
}
}
ich auch eine GUI, die viele Zellen und ich habe geschrieben, wie man es tun (wie benutzt man Farbe, Größe usw. erstellen, was ich will auf dem Bildschirm darstellen muss). Es enthält Klassen wie CellRepresentation, ShapeRepresentation und BackgroundRepresentation, deren Anzeigeeigenschaften an die Dateneigenschaften gebunden sind (ich denke, das nennt man Model and View).
Ich möchte der Lage sein, Änderungen in der GUI zu repräsentieren, indem die oben genannten Daten zu ändern:
- kann ein Benutzer (zum Beispiel) auf einer Form der rechten Maustaste und seine Farbe gesetzt. Daher ändern sich die obigen Daten und die Änderung muss in der GUI widergespiegelt werden.
- ein Benutzer kann auch die gesamte Form ändern (z. B. Kopieren-Einfügen aus einer anderen Zelle). Oder sogar die ganze Zelle. Diese Änderungen müssen sich auch in der GUI widerspiegeln.
Meine Frage ist, welche der Klassenmitglieder JavaFX Eigenschaften sein müssen, die ich zu binden.
Hier ist was ich denke: die "Blatt" Eigenschaften (Größe, Farbe, Ort ...) müssen Eigenschaften sein, damit ich die GUI-Eigenschaft an sie binden kann. Muss ich aber auch die Eigenschaften der Form und der Hintergrundobjekte festlegen? Nur ihre Eigenschaften haben eine "tatsächliche" Darstellung auf dem Bildschirm. Im Idealfall hätte es mir gefallen, wenn Shape sich ändert, dann sagen alle seine Eigenschaften ihren Bindings, dass sie sich geändert haben könnten (vielleicht hat die Farbe nicht, aber Größe getan). Aber es funktioniert nicht auf diese Weise - , obwohl die Farbe einer Form ändern kann, wenn die Form ändert die Farbe Eigenschaft wird nicht sagen, was auch immer daran gebunden ist, dass es geändert.
Das gleiche gilt für Cell eine Eigenschaft im Lagerbild, wo es viele Zellen gibt und so weiter: Eigenschaften von Eigenschaften, die Änderungen delegieren.
Also dachte ich mir, machen die Shape und Hintergrund auch Eigenschaften und Registrierung eines InvalidationListener
zu ihnen aktualisiert ihre Eigenschaften. Das scheint einfach nicht richtig zu sein, denn ich würde meinen, dass es mit all der Unterstützung für Immobilien eine Möglichkeit geben würde zu tun, was ich will.
Kann jemand einen Weg vorschlagen, dies zu tun?
Sie sollten über Vererbung lesen. – zyexal
@zyexal ich weiß über Vererbung, Java ist nicht neu für mich. Wie ist das zusammen? – Mark
Sie können sich die ['Bindings.selectXXX'] (http://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/Bindings.html#select-java) ansehen. lang.Object-java.lang.String ...-) Methoden, die Ihnen eine Möglichkeit geben, an "Eigenschaften von Eigenschaften" zu binden. Diese API hat etwas von einem "Legacy" -Gefühl, da sie weder typsicher noch kompilierfähig ist. Tomas Mikula hat eine [Bibliothek] (https://github.com/TomasMikula/ReactFX), die eine modernere Implementierung derselben Idee hat, siehe [this post] (http://tomasmikula.github.io/blog/2015) /02/10/val-a-better-observablevalue.html). –