- java.lang.Object
-
- javafx.css.CssMetaData<S,V>
-
- Type Parameters:
S
- The type of StyleableV
- The type into which the parsed value is converted.
- Direct Known Subclasses:
FontCssMetaData
public abstract class CssMetaData<S extends Styleable,V> extends Object
A CssMetaData instance provides information about the CSS style and provides the hooks that allow CSS to set a property value. It encapsulates the CSS property name, the type into which the CSS value is converted, and the default value of the property.CssMetaData is the bridge between a value that can be represented syntactically in a .css file, and a
StyleableProperty
. There is a one-to-one correspondence between a CssMetaData and a StyleableProperty. Typically, the CssMetaData of a Node will include the CssMetaData of its ancestors. For example, the CssMetaData of a Rectangle includes the CssMetaData of Shape and also of Node. During CSS processing, the CSS engine iterates over the Node's CssMetaData, looks up the parsed value of eachproperty
, converts the parsed value, and sets the value on the StyleableProperty.The method
Node.getCssMetaData()
is called to obtain the List<CssMetaData>. This method is called frequently and it is prudent to return a static list rather than creating the list on each call. By convention, node classes that have CssMetaData will implement a static methodgetClassCssMetaData()
and it is customary to havegetCssMetaData()
simply returngetClassCssMetaData()
. The purpose ofgetClassCssMetaData()
is to allow sub-classes to easily include the CssMetaData of some ancestor.The
StyleablePropertyFactory
greatly simplifies creating a StyleableProperty and its corresponding CssMetaData.This example is a typical implementation.
private DoubleProperty gapProperty = new StyleableDoubleProperty(0) { @Override public CssMetaData<MyWidget,Number> getCssMetaData() { return GAP_META_DATA; } @Override public Object getBean() { return MyWidget.this; } @Override public String getName() { return "gap"; } }; private static final CssMetaData GAP_META_DATA = new CssMetaData<MyWidget,Number>("-my-gap", StyleConverter.getSizeConverter(), 0d) { @Override public boolean isSettable(MyWidget node) { return node.gapProperty == null || !node.gapProperty.isBound(); } @Override public StyleableProperty<Number> getStyleableProperty(MyWidget node) { return (StyleableProperty<Number>)node.gapProperty; } }; private static final List<CssMetaData<? extends Node, ?>> cssMetaDataList; static { List<CssMetaData<? extends Node, ?>> temp = new ArrayList<CssMetaData<? extends Node, ?>>(Control.getClassCssMetaData()); temp.add(GAP_META_DATA); cssMetaDataList = Collections.unmodifiableList(temp); } public static List<CssMetaData<? extends Node, ?>> getClassCssMetaData() { return cssMetaDataList; } @Override public List<CssMetaData<? extends Node, ?>> getCssMetaData() { return getClassCssMetaData(); }
- Since:
- JavaFX 8.0
- See Also:
StyleablePropertyFactory
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
CssMetaData(String property, StyleConverter<?,V> converter)
Construct a CssMetaData with the given parameters, initialValue is null, inherit is set to false, and no sub-properties.protected
CssMetaData(String property, StyleConverter<?,V> converter, V initialValue)
Construct a CssMetaData with the given parameters, inherit set to false and no sub-properties.protected
CssMetaData(String property, StyleConverter<?,V> converter, V initialValue, boolean inherits)
Construct a CssMetaData with the given parameters and no sub-properties.protected
CssMetaData(String property, StyleConverter<?,V> converter, V initialValue, boolean inherits, List<CssMetaData<? extends Styleable,?>> subProperties)
Construct a CssMetaData with the given parameters and no sub-properties.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description boolean
equals(Object obj)
Two CssMetaData objects are considered to be equal if theirproperty
values are equal.StyleConverter<?,V>
getConverter()
V
getInitialValue(S styleable)
The initial value of a CssMetaData corresponds to the default value of the StyleableProperty in code.String
getProperty()
abstract StyleableProperty<V>
getStyleableProperty(S styleable)
Return the correspondingStyleableProperty
for the given Node.List<CssMetaData<? extends Styleable,?>>
getSubProperties()
The sub-properties refers to the constituent properties of this property, if any.int
hashCode()
Returns a hash code value for the object.boolean
isInherits()
If true, the value of this property is the same as the parent's computed value of this property.abstract boolean
isSettable(S styleable)
Check to see if the corresponding property on the given Node is settable.void
set(S styleable, V value, StyleOrigin origin)
Deprecated.This method is no longer called from CSS code. UseStyleableProperty.applyStyle(javafx.css.StyleOrigin, java.lang.Object)
String
toString()
Returns a string representation of the object.
-
-
-
Constructor Detail
-
CssMetaData
protected CssMetaData(String property, StyleConverter<?,V> converter, V initialValue, boolean inherits, List<CssMetaData<? extends Styleable,?>> subProperties)
Construct a CssMetaData with the given parameters and no sub-properties.- Parameters:
property
- the CSS propertyconverter
- the StyleConverter used to convert the CSS parsed value to a Java object.initialValue
- The initial or default value of the corresponding StyleablePropertyinherits
- true if this property uses CSS inheritancesubProperties
- the sub-properties of this property. For example, the -fx-font property has the sub-properties -fx-font-family, -fx-font-size, -fx-font-weight, and -fx-font-style.
-
CssMetaData
protected CssMetaData(String property, StyleConverter<?,V> converter, V initialValue, boolean inherits)
Construct a CssMetaData with the given parameters and no sub-properties.- Parameters:
property
- the CSS propertyconverter
- the StyleConverter used to convert the CSS parsed value to a Java object.initialValue
- The initial or default value of the corresponding StyleablePropertyinherits
- true if this property uses CSS inheritance
-
CssMetaData
protected CssMetaData(String property, StyleConverter<?,V> converter, V initialValue)
Construct a CssMetaData with the given parameters, inherit set to false and no sub-properties.- Parameters:
property
- the CSS propertyconverter
- the StyleConverter used to convert the CSS parsed value to a Java object.initialValue
- The initial or default value of the corresponding StyleableProperty
-
CssMetaData
protected CssMetaData(String property, StyleConverter<?,V> converter)
Construct a CssMetaData with the given parameters, initialValue is null, inherit is set to false, and no sub-properties.- Parameters:
property
- the CSS propertyconverter
- the StyleConverter used to convert the CSS parsed value to a Java object.
-
-
Method Detail
-
set
@Deprecated(since="8") public void set(S styleable, V value, StyleOrigin origin)
Deprecated. This method is no longer called from CSS code. UseStyleableProperty.applyStyle(javafx.css.StyleOrigin, java.lang.Object)
Set the value of the corresponding property on the given Node.- Parameters:
styleable
- The Styleable on which the property value is being setvalue
- The value to which the property is setorigin
- the origin
-
isSettable
public abstract boolean isSettable(S styleable)
Check to see if the corresponding property on the given Node is settable. This method is called before any styles are looked up for the given property. It is abstract so that the code can check if the property is settable without expanding the property. Generally, the property is settable if it is not null or is not bound.- Parameters:
styleable
- The Styleable on which the property value is being set- Returns:
- true if the property can be set.
-
getStyleableProperty
public abstract StyleableProperty<V> getStyleableProperty(S styleable)
Return the correspondingStyleableProperty
for the given Node. Note that calling this method will cause the property to be expanded.- Parameters:
styleable
- The Styleable for which the property is returned- Returns:
- The StyleableProperty corresponding to this CssMetaData for the given Styleable
-
getProperty
public final String getProperty()
- Returns:
- the CSS property name
-
getConverter
public final StyleConverter<?,V> getConverter()
- Returns:
- The CSS converter that handles conversion from a CSS value to a Java Object
-
getInitialValue
public V getInitialValue(S styleable)
The initial value of a CssMetaData corresponds to the default value of the StyleableProperty in code. For example, the default value of Shape.fill is Color.BLACK and the initialValue of Shape.StyleableProperties.FILL is also Color.BLACK.There may be exceptions to this, however. The initialValue may depend on the state of the Node. A ScrollBar has a default orientation of horizontal. If the ScrollBar is vertical, however, this method should return Orientation.VERTICAL. Otherwise, a vertical ScrollBar would be incorrectly set to a horizontal ScrollBar when the initial value is applied.
- Parameters:
styleable
- the styleable- Returns:
- The initial value of the property, possibly null
-
getSubProperties
public final List<CssMetaData<? extends Styleable,?>> getSubProperties()
The sub-properties refers to the constituent properties of this property, if any. For example, "-fx-font-weight" is sub-property of "-fx-font".- Returns:
- the list of sub-properties
-
isInherits
public final boolean isInherits()
If true, the value of this property is the same as the parent's computed value of this property.- Returns:
- false by default unless inherits is true
- See Also:
- CSS Inheritance
-
equals
public boolean equals(Object obj)
Two CssMetaData objects are considered to be equal if theirproperty
values are equal.- Overrides:
equals
in classObject
- Parameters:
obj
- the reference object with which to compare.- Returns:
- true if the obj is equaled, false otherwise
- See Also:
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
Description copied from class:Object
Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided byHashMap
.The general contract of
hashCode
is:- Whenever it is invoked on the same object more than once during
an execution of a Java application, the
hashCode
method must consistently return the same integer, provided no information used inequals
comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. - If two objects are equal according to the
equals(Object)
method, then calling thehashCode
method on each of the two objects must produce the same integer result. - It is not required that if two objects are unequal
according to the
Object.equals(java.lang.Object)
method, then calling thehashCode
method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
As much as is reasonably practical, the hashCode method defined by class
Object
does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)- Overrides:
hashCode
in classObject
- Returns:
- a hash code value for this object.
- See Also:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
- Whenever it is invoked on the same object more than once during
an execution of a Java application, the
-
toString
public String toString()
Description copied from class:Object
Returns a string representation of the object. In general, thetoString
method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.The
toString
method for classObject
returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@
', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:getClass().getName() + '@' + Integer.toHexString(hashCode())
-
-