Ich möchte Entity (Steuerelement oder Eigenschaft) haben, die verschiedene Zustände hat, die durch CSS eingefärbt werden können.Implementieren schreibgeschützten Stil in JavaFX?
Betrachten Sie zum Beispiel TextField, das zwei Arten von Werten enthalten kann, normal und fehlerhaft. Sobald es einen fehlerhaften Wert enthält, sollte es "rot" angezeigt werden. Aber die tatsächliche Farbe sollte von CSS definierbar sein.
Ist dies möglich?
Ich fand viele Styleable*
Schnittstellen oder Klassen, aber sie sehen aus wie in der Lage, jeden Stil zu akzeptieren.
Kann ich schreiben und Entity, die ihren Stil aus dem Wert ableitet?
'PseudoClass' ist viel einfacher für einen booleschen Zustand zu verwalten, da er entweder gesetzt oder nicht gesetzt ist. Reguläre CSS-Klassen werden als eine "Liste" von mit jedem Knoten verknüpften Zeichenfolgen gespeichert. Da es sich um eine 'List' handelt, kann sie Duplikate enthalten. Obwohl Sie Stilklassen aus dieser Liste hinzufügen und entfernen können, müssen Sie darauf achten, dass Sie nicht mehrere Kopien einer bestimmten Stilklasse hinzufügen (es sei denn, das ist aus irgendeinem Grund das, was Sie wirklich wollen). Für Anwendungsfälle wie diese führt die Verwendung von "PseudoClass" daher tendenziell zu einem saubereren Code. –
Danke für die Erklärung! Gibt es ein spezifisches Verhalten, wenn eine Stilklasse mehr als einmal für einen Knoten vorhanden ist (entweder für JavaFX oder einfaches CSS)? Ich bin mir nicht sicher, ob ich mir ein vernünftiges Verhalten vorstellen kann, außer es nur einmal zu sehen. – Itai
Die CSS-Übereinstimmungsregeln sehen nur aus, ob die Stilklasse auf einem Knoten vorhanden ist oder nicht. Wenn es also mehrfach in der Liste hinzugefügt wird, stimmt es mit der Klasse überein. Probleme können jedoch auftreten, wenn Sie versuchen, es zu entfernen: 'myNode.getStyleClass(). Remove (" some-style ");' entfernt das erste Vorkommen. Wenn Sie es also versehentlich mehrmals hinzugefügt haben, hat dies (wahrscheinlich) gewonnen Habe nicht den Effekt, den du suchst ... Es kann wirklich knifflig sein, z in benutzerdefinierten Zellenimplementierungen, in denen Sie nicht viel Kontrolle darüber haben, wann 'updateItem()' aufgerufen wird. –