Module  javafx.graphics
软件包  javafx.css

Class CssMetaData<S extends Styleable,V>

  • 参数类型
    S - S的类型
    V - 转换解析值的类型。
    已知直接子类:
    FontCssMetaData


    public abstract class CssMetaData<S extends Styleable,V>
    extends Object
    CssMetaData实例提供有关CSS样式的信息,并提供允许CSS设置属性值的钩子。 它封装了CSS属性名称,转换CSS值的类型和属性的默认值。

    CssMetaData是可以在.css文件中语法表示的值之间的桥梁,以及一个StyleableProperty CssMetaData和StyleableProperty之间有一对一的对应关系。 通常,节点的CssMetaData将包含其祖先的CssMetaData。 例如,Rectangle的CssMetaData包括Shape的CssMetaData和Node。 在CSS处理过程中,CSS引擎遍历节点的CssMetaData,查找每个property的解析值,转换已解析的值,并设置StyleableProperty上的值。

    调用方法Node.getCssMetaData()以获得List <CssMetaData>。 此方法被频繁调用,谨慎地返回一个静态列表,而不是每次调用创建列表。 按照惯例,具有CssMetaData的节点类将实现一个静态方法getClassCssMetaData() ,通常只有getCssMetaData()返回getClassCssMetaData() getClassCssMetaData()的目的是允许子类容易地包含一些祖先的CssMetaData。

    StyleablePropertyFactory大大简化了创建一个StyleableProperty及其相应的CssMetaData。

    这个例子是一个典型的实现。

       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(); }  
    从以下版本开始:
    JavaFX 8.0
    另请参见:
    StyleablePropertyFactory
    • 构造方法详细信息

      • CssMetaData

        protected CssMetaData​(String property,
                              StyleConverter<?,V> converter,
                              V initialValue,
                              boolean inherits,
                              List<CssMetaData<? extends Styleable,?>> subProperties)
        用给定的参数构造一个CssMetaData,没有子属性。
        参数
        property - CSS属性
        converter - StyleConverter用于将CSS解析的值转换为Java对象。
        initialValue - 相应StyleableProperty的初始值或默认值
        inherits - 如果此属性使用CSS继承, inherits true
        subProperties - 此属性的子属性。 例如,-fx-font属性具有子属性-fx-font-family,-fx-font-size,-fx-font-weight和-fx-font-style。
      • CssMetaData

        protected CssMetaData​(String property,
                              StyleConverter<?,V> converter,
                              V initialValue,
                              boolean inherits)
        用给定的参数构造一个CssMetaData,没有子属性。
        参数
        property - CSS属性
        converter - 用于将CSS解析的值转换为Java对象的StyleConverter。
        initialValue - 相应StyleableProperty的初始值或默认值
        inherits - 如果此属性使用CSS继承, inherits true
      • CssMetaData

        protected CssMetaData​(String property,
                              StyleConverter<?,V> converter,
                              V initialValue)
        使用给定的参数构造一个CssMetaData,继承设置为false并且没有子属性。
        参数
        property - CSS属性
        converter - 用于将CSS解析值转换为Java对象的StyleConverter。
        initialValue - 相应StyleableProperty的初始值或默认值
      • CssMetaData

        protected CssMetaData​(String property,
                              StyleConverter<?,V> converter)
        使用给定的参数构造一个CssMetaData,initialValue为null,inherit设置为false,没有子属性。
        参数
        property - CSS属性
        converter - 用于将CSS解析值转换为Java对象的StyleConverter。
    • 方法详细信息

      • isSettable

        public abstract boolean isSettable​(S styleable)
        检查给定节点上的相应属性是否可设置。 在给定属性查找任何样式之前调用此方法。 它是抽象的,以便代码可以检查属性是否可以设置,而不扩展属性。 一般而言,如果属性不为空或不受约束,则该属性是可设置的。
        参数
        styleable - 要设置属性值的样式
        结果
        如果可以设置属性,则为true。
      • getStyleableProperty

        public abstract StyleableProperty<V> getStyleableProperty​(S styleable)
        返回给定节点的相应StyleableProperty 请注意,调用此方法将导致扩展属性。
        参数
        styleable - 返回属性的样式
        结果
        与给定Styleable的此CssMetaData相对应的StyleableProperty
      • getProperty

        public final String getProperty​()
        结果
        CSS属性名称
      • getConverter

        public final StyleConverter<?,V> getConverter​()
        结果
        处理从CSS值到Java对象的转换的CSS转换器
      • getInitialValue

        public V getInitialValue​(S styleable)
        CssMetaData的初始值对应于代码中StyleableProperty的默认值。 例如,Shape.fill的默认值为Color.BLACK,Shape.StyleableProperties.FILL的initialValue也是Color.BLACK。

        然而,这可能是例外。 initialValue可能取决于Node的状态。 ScrollBar具有水平的默认方向。 但是,如果ScrollBar是垂直的,则此方法应返回Orientation.VERTICAL。 否则,当应用初始值时,垂直ScrollBar将被错误地设置为水平ScrollBar。

        参数
        styleable - 风格
        结果
        属性的初始值,可能为null
      • getSubProperties

        public final List<CssMetaData<? extends Styleable,?>> getSubProperties​()
        子属性是指该属性的组成属性(如果有)。 例如,“-fx-font-weight”是“-fx-font”的子属性。
        结果
        子属性列表
      • isInherits

        public final boolean isInherits​()
        如果为true,则此属性的值与父属的此属性的计算值相同。
        结果
        默认情况下为false,除非inherits为true
        另请参见:
        CSS Inheritance
      • equals

        public boolean equals​(Object obj)
        如果两个CssMetaData对象的 property值相等,则认为它们相等。
        重写:
        equalsObject
        参数
        obj - 与之比较的参考对象。
        结果
        如果obj相等,则为true,否则为false
        另请参见:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode​()
        描述从类别复制: Object
        返回对象的哈希码值。 支持这种方法有利于哈希表,如HashMap提供的那样

        hashCode的一般合同是:

        • 在执行Java应用程序时,无论何时在同一对象上多次调用该对象,则hashCode方法必须始终返回相同的整数,前提是修改了对象中equals对比中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。
        • 如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。
        • 要求如果两个对象根据Object.equals(java.lang.Object)方法不相等,则在两个对象中的每个对象上调用hashCode方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。

        尽可能多的合理实用,由类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (在某个时间点,hashCode可能或可能不被实现为对象的存储器地址的某些功能。)

        重写:
        hashCodeObject
        结果
        该对象的哈希码值。
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • toString

        public String toString​()
        描述从类复制: Object
        返回对象的字符串表示形式。 一般来说, toString方法返回一个字符串,“文本地表示”此对象。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。

        toString类方法Object返回一个由类的名称,其中所述对象是其实例,该符号字符`的字符串@ ”,并且对象的哈希码的无符号的十六进制表示。 换句话说,这个方法返回一个等于下列值的字符串:

         getClass().getName() + '@' + Integer.toHexString(hashCode())
         
        重写:
        toStringObject
        结果
        a string representation of the object.